仓酷云
标题:
发布一篇对象扫除时的窘境:由谁卖力扫除?
[打印本页]
作者:
山那边是海
时间:
2015-1-18 11:37
标题:
发布一篇对象扫除时的窘境:由谁卖力扫除?
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。
每一个对象都请求资本才干“保存”,个中最使人注视的资本是内存。假如不再必要利用一个对象,就必需将其扫除,以便开释这些资本,以便其他对象利用。假如要办理的长短常复杂的成绩,怎样扫除对象这个成绩其实不显得很凸起:我们创立对象,在必要的时分挪用它,然后将其扫除大概“损坏”。但在另外一方面,我们平常碰到的成绩常常要比这庞大很多。
举个例子来讲,假定我们要计划一套体系,用它办理一个机场的空中交通(一样的模子也大概适于办理一个堆栈的货柜、大概一套影带出租体系、大概宠物店的宠物房。这初看仿佛非常复杂:机关一个汇合用来包容飞机,然后创立一架新飞机,将其置进汇合。对进进空中交通控制区的一切飞机都云云处置。至于扫除,在一架飞机分开这个地区的时分把它复杂地删往便可。
但事变并没有这么复杂,大概还必要另外一套体系来纪录与飞机有关的数据。固然,和把持器的次要功效分歧,这些数据的主要性大概一入手下手其实不显现出来。比方,这笔记录反应的多是分开机场的一切小飞机的航行企图。以是我们失掉了由小飞机构成的另外一个汇合。一旦创立了一个飞机对象,假如它是一架小飞机,那末也必需把它置进这个汇合。然后在体系余暇时代,需对这个汇合中的对象举行一些背景处置。
成绩如今显得更庞大了:怎样才干晓得甚么工夫删除对象呢?用完对象后,体系的其他某些部分大概仍旧要发扬感化。一样的成绩也会在其他大批场所呈现,并且在程序计划体系中(如C++),在用完一个对象以后必需明白地将其删除,以是成绩会变得非常庞大(正文⑥)。
⑥:注重这一点只对内存堆里创立的对象建立(用new命令创立的)。但在另外一方面,对这儿形貌的成绩和其他一切罕见的编程成绩来讲,都请求对象在内存堆里创立。
在Java中,渣滓搜集器在计划时已思索到了内存的开释成绩(只管这其实不包含扫除一个对象触及到的其他方面)。渣滓搜集器“晓得”一个对象在甚么时分不再利用,然后会主动开释谁人对象占有的内存空间。接纳这类体例,别的加上一切对象都从单个根类Object承继的现实,并且因为我们只能在内存堆中以一种体例创立对象,以是Java的编程要比C++的编程复杂很多。我们只必要作出大批的决定,便可克制本来存在的大批停滞。
1.渣滓搜集器对效力及天真性的影响
既然这是云云好的一种手腕,为何在C++里没有失掉充实的发扬呢?我们固然要为这类编程的便利性支付必定的价值,价值就是运转期的开支。正如新近提到的那样,在C++中,我们可在仓库中创立对象。在这类情形下,对象会得以主动扫除(但不具有在运转时代为所欲为创立对象的天真性)。在仓库中创立对象是为对象分派存储空间最无效的一种体例,也是开释那些空间最无效的一种体例。在内存堆(Heap)中创立对象大概要支付高贵很多的价值。假如老是从统一个基本类承继,并使一切函数挪用都具有“同质多形”特性,那末也不成制止地必要支付必定的价值。但渣滓搜集器是一种特别的成绩,由于我们永久不克不及断定它甚么时分启动大概要花多长的工夫。这意味着在Java程序实行时代,存在着一种不联贯的要素。以是在某些特别的场所,我们必需制止用它——好比在一个程序的实行必需坚持不乱、联贯的时分(一般把它们叫作“及时程序”,只管并非一切及时编程成绩都要这方面的请求——正文⑦)。
⑦:依据本书一些手艺性读者的反应,有一个现成的及时Java体系(www.newmonics.com)的确可以包管渣滓搜集器的效能。
C++言语的计划者已经向C程序员收回哀求(并且做得十分乐成),不要但愿在可使用C的任何中央,向言语里到场大概对C++的速率或利用形成影响的任何特征。这个目标到达了,但价值就是C++的编程不成制止地庞大起来。Java比C++复杂,但支付的价值是效力和必定水平的天真性。但对年夜多半程序计划成绩来讲,Java无疑都应是我们的首选。
首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
作者:
若相依
时间:
2015-1-21 11:21
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
愤怒的大鸟
时间:
2015-1-21 11:21
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
飘飘悠悠
时间:
2015-1-21 11:21
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
变相怪杰
时间:
2015-1-24 12:41
是一种将安全性(Security)列为第一优先考虑的语言
作者:
老尸
时间:
2015-2-1 11:47
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者:
仓酷云
时间:
2015-2-7 04:32
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
爱飞
时间:
2015-2-15 07:23
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者:
冷月葬花魂
时间:
2015-3-4 11:23
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
若天明
时间:
2015-3-4 11:23
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
因胸联盟
时间:
2015-3-11 18:47
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
飘灵儿
时间:
2015-3-11 19:59
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者:
再见西城
时间:
2015-3-17 19:37
是一种将安全性(Security)列为第一优先考虑的语言
作者:
简单生活
时间:
2015-3-24 21:41
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
谁可相欹
时间:
2015-3-25 00:05
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者:
不帅
时间:
2015-4-6 18:10
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
分手快乐
时间:
2015-4-16 04:05
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者:
深爱那片海
时间:
2015-4-18 10:44
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者:
admin
时间:
2015-4-25 04:27
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2