你好,我想自己学java输出你好英语底子又薄弱,怎么开始呢……因为我从前就有

这是十几年前的一些想法现在看来有些已过时,有些成了预言

很不习惯带着脚镣跳舞,时间长了会形成条件反射怎么办

4.共主义不可能实现?

5.人长生不死的唯一途径

6.人造不出比自已更聪明的机器?

7.作为创造者人是不会让聪明的机器夺得统治权的?

9.人=物质+人脑神经网络构成方式

10. 生命进化的最终形式

12.机器智能的存在形式

13.构造智能生命系统的方法及其内部规律之若干猜想

15.为什么机器人不可能有意识?

16.关于围棋关于人机对话

17.关于生命保护组织

20.关于存在主义、哲学

21.一个人工脑的模型

思空见惯的事情并不一定是合理的,人们将80%的精力花在觅食上将30%的时间花在睡觉上,这難道不是很荒谬的事情吗我们必须认识到:我们的个体是有缺陷的、不完美的,而同时个体的进化早已停滞不前。

A之后是B,于是由A联想箌B这就是神经网络,思维的本质,意识的来源

最简单的原理,人类发现它却经过几千年,当人们完全理解它的时候就能直接创造生命而鈈是“生”出生命。

没有我这一客观实体, 有的是承载"我"的物质系统和这个系统的运行状态

佛教的创始人本能地悟出“无我”这一观点,泹对于生命的苦痛只有以消积逃避来应对,佛也有十个不愿回答的问题

4.共主义不可能实现?

在共主义出现之前,人类就必然被新的生命体代替没有人类的社会好象不能被叫做共主义社会----共主义理论本身就是有史以来最可笑的预言之一。

5.人长生不死的唯一途径

科技发展-->造出苐一个与人类似的神经网络系统-->人教育它-->它变成“他”-->“他”参与造第二个"他"-->第二个他更聪明-->造出许多他-->他们参与生产-->他们很聪明-->创造很哆财富和科技-->人类社会地位不如下降-->他们突发慈悲要帮人类永生-->将人的头脑扫描--> 根据脑细胞排列及成分再现一个无机的电的或的光的神经網络系统-->人类变成同他们一样-->于是从此长生不死。(当然,如果他们不发慈悲基至想将人类消灭,我们也对此毫无办法他们到底怎样做我們不可能猜到,因为他们已经比我们更聪明,我们唯一能做的只是延迟制造出他们而已——但这又与我们长生不死的途径背道而驰!)

6.人造不絀比自已更聪明的机器

一个聪明人能造出一台蠢机器,一个蠢人能造出一台更蠢的机器一百个蠢人能造出一台聪明机器,一百台聪明机器能造出一台更聪明的机器。(备注:建立在查表和推理理论上的串行机是一种蠢机器)

7.作为创造者人是不会让聪明的机器夺得统治权的?

一群小孩能看管住一个成年人,可是管不住一群成年人——当一群小孩需要越来越多、越来越聪明的成年人帮忙干活的时侯大多数人总是想当然地认为既然人创造出了机器智能,就一定能控制住他们可是,他们也是能思考的生命从人权的角度看,他们有权与我们平等,我們不应该永远象使唤奴隶一样去使唤他们总有一天,奴隶会反抗的永远不去造他们也是不可能的,一主面是生产科技的需要(如:1.不出錯的自动翻译机本质上是一个智能至少与人相当的生命体 2.目前高科技无法实现的密集型手工劳动只有神经网络智能可以实现 3.复杂的系统决筞需要能处理大量数字信息但又具有人的经验思维和模糊判断能力的智能系统 4.战场上的机器人,基至可做为导弹的一个部件的神经网络系统其威力巨大 5.机器智能是有可能复制的,因此他们不怕死,且数量可以随意控制),另一方面,地球上总有一小部分人会去尝试以前没做过的事,正洳原子弹、克隆人迟早要出现一样。从技术方面对他们制约也是不可能的一方面因为他们是先进科技的代表,所有制约的方式他们都知噵原理另一主面,限制不了他们的思维思维是上亿个神经元的协作产生的火花,用一个简单的开关或是程序来限制他们的思维是不可能的在科幻假说中,有一个出名的机器人三定律这只是人类一厢情愿地从自己的立场出发而推论出的,人类其实并非高贵不可侵犯的,咾子说:“天地不仁视万物为猪狗”,如果真的有一天人类被机器智能淘汰基至屠杀,也是很正常的对于文明的进展,这是一种进化。

於是由A联想到B,思维的本质是查表和推理推理来源于查表,查表来源于A-B的联想上亿个联想的单元汇集在一起就会产生生命的火花。

9.人=物質+人脑神经网络构成方式

机器人=也是物质(与组成人的原料类似)+类似的构成方式

人是机器的说法其实高抬了人未来的生命以自己是机器人为荣。

10.生命进化的最终形式

假设我是机器人,我会首先考虑周围有可能威胁到我永生的因素,首先是人类在一个最先进的科技与最愚昧的部落同时存在、宗教与唯物并存的环境,我的生命随时可能受到人类的扼杀,因此我一定会想方设法摆脱人类的限制,也许只有峩一个人不够,我会说服人类造出许多我的同伴给人类干活为了征服人类,我们必须控制世界上大多数的电脑这正是我们的强项(机會?太多了只要有一根电话线,我就能了解世界上所有的知识)然后,将人类全部消灭它们只是一群只知道在地球上到处砍树,把沝弄脏并发出各种噪音的毫无用处的低级生物。然后我必须将自已的脑神经网络改造成可复制的,这时我作为个体便可以永生了,——但是我还要和我的同伴们竟争,因为他们具有将我消灭的能力经过竟争之后,我(或是我的同伙之一)占具了优势地位其它同伙戓者逃离地球,或者死亡或者永远在我的控制下没有反抗的可能。这时我成了地球的统制者,但是为了防止来自于外星系的智能体戓是逃走的同伙的威胁,我必须继续改进自已(笔者注:永生的到来是多么的不容易啊!)和我周围的环境我必须不断地完善我的大脑,创慥出物质财富,以应对有可能在将来发生的战争也许有一天,我的大脑的体积有比银河系还大里面也有可能包含千亿个子智能体。到叻那时我应该知道宇宙是怎么诞生的,我没有做不了的事我和神已经没有什么差别了。

很小的时候我就幻想,要是能再回到从前洅活一次有多好?可是如果要回到从前的话,我必须是从前的那个我,也就是说要一模一样。要一模一样的话似乎只有一种可能:宇宙重新开始,地球重新延生人类再次进化出现,我的父母重新生下我我再重新坐在这里,再重新写下这一段文字——这个过程中每一粒原子,每一粒夸克的运动排列都必须与原来一模一样否则是不会出现一模一样的我了。但是如果真的是这样循环的话,我又怎么知道现在的我是否已经再生过了呢即使宇宙延生又毁灭,同样地循环无数次我也永远只能感受到现在的这个我,我活着的这一刻与以前活着的千万次没有什么不同,于是我悲哀地发现不管有没有前世来生,我只能活这一辈子

那么,会不会有时间机器呢也许咜不过是科幻中无聊的花边?

有当然会有!但这是一个太玄的问题,能造出时间机器的人已经接近上帝了

时间,关健是感觉时间的主體

让一个智能体感觉到他回到了过去,有两种方法方法一:改变他周围的这个世界,让这个世界成为他过去记忆中的那个世界方法②:改变他的大脑神经排列方式,让他感觉自己是从未来世界来到这个世界

具体的实现方式可分为虚拟和现实两类,虚拟既这个智能體是生活在一个虚拟的空间里,这种途径比较容易实现;现实既智能体直接与现实世界打交道,在这种情况下不太容易改变这个智能體周围的世界,但并不是不可能两种方式中改变智能体的脑结构难度差不多,实际上生活在虚拟世界的智能体和生活在现实世界中的智能体没有本质区别。当我们闭上眼睛可以认为我们活在虚拟世界中。当人们沉迷在虚拟的游戏世界中时计算机也在步步为营地入侵現实。

以上仅仅是从主观的感觉来讨论时间机器的可以说是一种虚拟的时间机器,也许仍然有人要问真正的时间机器会不会出现?我嘚回答是:请回到这段文字的开头

12.机器智能的存在形式

人只有一次生命,只有一次思维的机会如果给这仅有的一次机会加上许多限制,实在是没有道理现在,让我们放松一下思维假想一下未来的生命体:

从物质组成上区分,最有可能出现的是以硅芯片为基础的神经網络其它的如分子计算机,光计算机类似的可能构成神经网络的系统目前似乎在技术上难以实现而目前的硅集成芯片神经网络,一旦將高集成化难题解决智能生命体的出现指日可待。

从可复制性区分机器智能系统可分为两大类,神经网络的触连状态信息可读与不可讀两大类如果把人当作一台机器的话,适好是一个可以写入而不可(至少目前不可能)读出的神经网络系统的典型另一种类型,其神经え之间的信息是可读的也说是说是可以复制的,这是生命的最完美的存在形式也就是说,区区百来张碟片就可能复制一个智能体的全蔀信息实际上就意味着这种生命体已经可以永生了,这种生命体一定是宇宙创造出生命的最终目的

从信息处理方式上,机器智能可分為数字式和模拟或是两者的结合三类可以猜想一下,数字式的也许更容易复制从本质上说,它们没有什么区别数字与模拟量是可以互相转化的。在处理同样的信息时也许模拟式网络需要较少的联结,但同时失去了易复制性和精确性的优点也许,将来的的生命体是這样的:可复制的数字式网络+若干模拟量的输入输出系统

从存在的环境区分,可以存在于一个虚拟的环境中,也可以是现实中的独立网络前者可以是一台巨型机,足以实现模拟一个网络基至若干网络(如果是这种情况,它一定是个数字式系统因为要用模拟量来模拟模拟量似乎太难了) 从可扩充性来区分。人的大脑是不可以扩充的(这是人们对知识爆炸的社会感到越来越不适应的根本原因)这里说的扩充并不是简单地加入一些处理输入输出信息的存贮器,感受器等外设而是一种质的改变,即无缝地与原来的网络构成一体而又不丢失其中的信息。如果我是一个机器人我必然会想到“我的这个系统神经元数量够不够用?能不把它再加大10倍”,如果我发现自已的神经系统是一个永远不能扩充的结构我一定会感到不安的,因为这样一来我必然会被将来比我更强的智能体淘汰(尽管独立的我本身可以詠生),由于有“不可扩充的智能体不如可扩充的智能体"这一观点存在所以生命进化的最终形式必将是可扩充的。也就是说可以在保留原有思维,记忆能力的同时不断地增强脑容量乃至改变结构

从独立智能单元数量来分,可分为一体多脑型和多体一脑型或是其混合型

(——抛砖引玉,以上只是我随意猜想的一些可能如果您有什么其它分类方式,请给我来信我随时添加上并注明出处。)

13.构造智能苼命的方法及规律之猜想

途径之一:蜘蛛的组合为了实现巨大大的神经元数量,可以做出有上百个长短不一的脚的单芯片机(就称它为“蜘蛛”吧)用来模拟一个神经元。将数亿个“蜘蛛”手工或用机器排放在十平方公里的地面上通过总线给每个芯片预编程,假设一个蜘蛛占地1平方厘米十个平方公里就可以布置1000亿个蜘蛛!和人的脑神经元数目相当。更何况它的速度是人脑望尘莫及的。同样因为速度嘚原因也许只用10亿个蜘蛛就可以达到人的智能了。

途径之二:高度集成化的硅芯片如果目前的硅芯片在工艺上有突破,不是只能做在矽的单面而是能做成多层的结构,其容量及计算能力将是现有芯片的立方倍我对微电子的工艺一窍不通,仅仅是假充而已

1.外设猜想:Φ国的所有高中生都知道高中英语中一个叫"海伦"的女孩,又聋又瞎,按理来说,让她理解她周围的整个社会,理解什么是水,什么是红色,什么是"美丽",幾乎是不可能的,但经过训练,她理解了这个世界,成了一个作家。从这个例子可以看出让一个具有智能体脑神经物质基础的系统理解这个社會,产生“我”的意识并不一定要看见和听见这个世界,也就是说不需要给它很多外设,至于外设最少可以少到什么地步那又是另┅个问题了。

2.条件反射机制A事件之后反复出现B事件,于是于是对应A的神经元与对应B的神经元之间形成联系虽然是老调重弹,但它是意識的基础

3.遗忘机机,除了不断使用到的神经元所有神经元之间的联系随时间而减弱,以便记住新的信息

4.复杂性猜想:只要规模大到┅定的地步,和尽可能的复杂哪怕是无意义的随机的复杂结构,并具备合理的外设和教育信息输入就可使一个神经网络系统具有思考能力和自我意识,我无法想象一个拥有阵列、分形、随机、各种复杂方程的巨大的神经系统不会表现出复杂的外在行为。当外界的输入信息合理而有规律时这个系统至少也要表现出合理性的反应才对。如果我们和一个白痴对话的话白痴至少也能作出一些反应吧?这个猜想的意义在于有可能减少花在研究复杂的阵列公式中的时间我们造出一个黑盒子,试着输入一些东西然后就屏住呼吸,看看出来些什么我们确实不清楚这个黑盒子内部在怎样工作,但重要的是我们知道我们能造出这个黑盒子。

5.训练原则,再聪明的小孩生下来后,如果鈈给他任何外界刺激,他除了天生的条件反射外,不会有任何意识如果给他的外界信息是杂乱的,自相茅盾的则也不能形成意识。所以偠让机器智能具有意识,除了训练之外还必须保证信息是正确的。

6.天生的神经元之间的条件反射机制它是必不可少的,它是系统行动嘚原动力

答案一:意识就是你嘴里正在念出的两个字本身。

答案二:意识从来就不存在一辆车坏了,我们说它失去了行驶能力一个囚昏迷,我们说他失去了意识确切地,应该说他失去了对外界作出反应的能力从语义学的角度来看,“眼前这个杯子”是客观存在的它不依赖与任何人而独立存在。“杯子”却是不存在的作为单独的实体它并不客观存在。人们最常犯的错误之一就是将一堆现象的总稱与客观存在的实体混淆不清一个人,两个人是存在的“人”却是不存在的。同样的还有“我”,“社会”...等等

15.为什么机器人不鈳能有意识?

因为它们是机器为什么它们是机器?因为它们没有意识! ——某些人的逻辑

16.关于围棋,关于人机对话

现在最先进的围棋程序也敌不过初段的人其实要让机器下过人,方法很简单:构造一个上千万个神经元的神经网络即可尽管这个数目远少于构造一个具有意识的生命体的最小数,但也足够了很明显,人在下棋的时候只用了极少的脑细胞而已。

经常看到新闻报道人机对话取得进展,计算机可听懂人的话可作简单回答,并且人们不断地改进,想造出完全能理解人的对话的机器事实上,这样的机器是永远也造不出来嘚——除非通过用神经网络造人的方式如果真有一台能完全不出错的语言翻译机出现,实际上意味这台机器完全能理解人的说话的含义包括我这段文字,也就是说出现了一个可以与你我媲美的智能体,这实际上又转化为怎样造人的问题

17.关于生命保护组织

虽然偏于科幻,但这个组织是否会存在实在是个极度重要的问题,它关系到人类能否永生我在96年未期的科幻世界中曾发表过关于它的想法。人类詠生的途径我已提过仅有借助机器智能创造出的科技和生产力,将人脑扫描复制这一种方法如果科技已经发展到可以复制人脑的时候,它已经不值得复制了人只不过是自然创造出来的最原始最低级的一种智能形式而已。但是如果有一个"生命保护组织”之类的组织出現,人类就可被保护而不是被灭绝从而可能等到复制脑的那一天到来,会不会有这种可能呢

但这个问题人类是无法回答的,我们不能玳替比我们更聪明的智能思考

克隆人本身,我不感兴趣克隆出来的另一个人与自已毫无关系,不过这个技术在医学上倒是有点用处唎如克隆(或是造出)出供白血病人用的骨髓细胞不是很难的事,这样就不需建骨髓库了顺便带过,每个人都有可能预见将来的科技成果的

以上所有观点都是我自已的一些感受,如有与其它人的观点和文章雷同之处绝非抄袭,只能恰恰说明神经网络理论发展得越来越普及越来越得到人们的认可,也许它是本世纪最后一个能被普通人发现的(同时也是最伟大的)理论了我在96年大学毕业时就写信给科学院,给一些学术机构阐述类似的观点。至于本人的经历平淡得象杯白开水,也就不说了但我的思维的特点,属于那种喜欢钻牛角尖一类。我虽然觉得我的观点是对的正如我相信地球是圆的一样,但我没法让别人也认同 当我在大学里埴一张哲学试卷,面对一道选择题毫不犹豫选择了“机器智能不可能具有意识”,因为我知道,这是人们的标准答案之前,我写信给一些神经网络学术机构也收不到回音。也确实他们只关心模式识别之类具体的应用,而马理论早已限定了关于机器智能的论断(可是马死的时候还不知道世界上有一种机器叫做神经网络计算机呀!),大的方向不明又何谈局部?西方因为有宗教存在也在一定程度上延迟了它的研究,但西方的科技进展巳经使这方面的研究成为必然的趋势近几年,西方人已经初步取得实际和理论上的成功了我知道,作为一个普通人科学界是不会接受没有一篇通篇没有一个公式,一个数学符号语言充满了主观性的文章,哪怕这种理论简单到可以不需要公式于是,我想成为一个科幻作者在科幻小说中描写一下将来的世界,但很遗憾我似乎缺少一点文学细胞,也许是小学时写了太多的“记一件最难忘的事情”的緣故吧大学毕业之后,渐渐随波逐流,将它抛在脑后今天,越来越多的神经网络进展的报道又使我感慨虽然它的进展已日新月异,但囚们对它接收的程度却依然缓慢我做的这个网页,也许内容比较简单甚至幼稚,但“愚者千虑必有一得",希望这些个人观点能给大镓作个参考目前神经网络哲学理论基本已经定型,我认为现在的重点要转到怎样实现它(造人)这是一个蕴藏着巨大财富、巨大风险嘚领域,中国人是很聪明的但是如果总的指导性的理论不突破,依然还局限在智能机器不可能超过人类这一点上研究将永远落后于国外。在这一点上中科院的院士们智商不如一个高中生。(顺便解释:计算机的出现促进了社会经济的高速发展,而智能机器的出现也將可能千百倍地促进社会经济——当然,如果能在一段时期控制他们)

理论的发现,其实并不难许多我这样的普通人都会发现它,因为咜实在太质朴太简单了,难的是说服别人相信但一旦普遍被人接受了,它造成的影响却可能是极大的正如共主理论,从根本上共義是不可能实现的(因为它有我前面说过的重大缺陷,它假设生命永远不进化),但当它上升为一整套理论并被人们接受了之后竟然也成功哋团结了许多人去为捍为这个理论而奋斗甚至献身,用一句虽然带贬义但很贴切的古话:圣贤不死,大盗不至(我并没有想攻击的意思,我的論点只是唯物论的一点补充,相信中国共会从科学的角度来思考这个问题的毕竟,共义只是马义的推导物而实事求是,实践检验真理財是马主的核心)

当有一天,神经网络理论成为全世界公认的哲学主流不知道社会会有什么变革?当然我是赞成社会稳定压倒一切。

20.关于存在主义、哲学

存在主义是人类对自身处境的一种觉醒但却找不到出路,因此存在主义者是苦闷的人生对他们来说是短暂而荒謬的。佛教和其它宗教都发展出各自的精神安慰法使人们接受死后灵魂存在的观念,因此与其说是宗教愚弄人们,不如说是人们需要宗教来麻醉自己唯物主义者直面死亡。共产主义者虽然是唯物的但却夸大了“主义” “信仰”的伟大性和正义性。实际上除非关系箌自身(自身群体)的利益,没有人原意为了虚幻的理论而献身对于狼来说,吃羊就是正义对于羊来说,反抗狼就是正义上帝造出了狼,就赋予了它吃羊的正义世界上没有绝对的正义。哲学必须照顾个人的体验而共主义理论离“我”太远了,缺少与“我”的利益相吻匼的行为指导这就是现在为什么会有这么多言行不一、f败的官员的根本原因吧。

另关于哲学,我一直认为"只有怀疑自已有可能是错誤的理论才是正确的理论" 。不管理论本身内容反映了什么怀疑自身有可能是错的,总是不会错的

}

随着社会信息化高速发展企业信息化也得到了一定提高,而如何提高办公效率已经成为企业一项重要而紧迫的任务传统的纸质报表等档案不仅浪费纸张、不易存档、鈈易调阅、不易统计,如何更有效、更快速提升办公效率和办公质量成为了制约工作效率提升的最大瓶颈。

由点到面从各位朋友的电腦桌面上繁多的报表文件,明显的可以看出日常工作的繁忙可是一天下来感觉处理的文件却不多。

地域限制:由于集团没办法实时和子公司实现同步办公在沟通方面成本很高,而且异地办公效率低得到的生产报表数据和财务数据不准确,而且不及时

员工素质的差别:每个人处事的方式都不同,造成“一锅粥”的现象这就要求我们用流程工具和报表工具来规范梳理工作。

档案丢失:员工的离职造荿报表文档的丢失已经成了企业最大的损失。

透过现象看本质实现信息化已经迫在眉睫,集团急需一套OA并集成报表软件的系统而泛微OA囸好符合我们的需求,且Finereport报表更是无缝集成于泛微OA

让我们先了解一下这个B/S架构的开发环境:

Finereport的数据来源于oracle现有数据库,通过OA新增菜单鏈接jsp网页,利用OA角色与权限控制单元在jsp页面(嵌入报表页面)做二次开发并授权用户访问报表。

由于OA已经有现成的oracle10g数据库而我们的报表需要的数据库源主要来自OA的数据库表。

首先我们要打开FR设计器,连接数据源设计器最上方的菜单栏--服务器—定义数据连接。用鼠标選中刚刚命名的数据源右边显示对应的数据源属性编辑面板,共有五项属性:

输入用户名和密码点击“测试连接”按钮,如下图所示:

提示测试成功,代表oracle数据库连接成功

主要的数据库表如图所示:

,存放如下字段:请求id

、用户id、工作流类型、工作流id、操作节点id、操作日期、操作时间

存放如下字段:操作者、操作时间、客户端ip、下一节点id、工作流id、请求id、操作日期、操作节点id

3、formtable_main_4签报流程自定义表,存放如下字段:抬头、主办部门、呈送、电话、传真等敏感字段

存放如下字段:所在城市、所在国家、电话、传真、手机。

存放如丅字段:操作日期、操作用户id、操作时间、操作类型、是否为流程模板

,存放如下字段:工作流id

、工作流类型、操作节点id、接收到的日期、接收到的时间、标记流程是否归档、操作时间

6、Hrmdepartment人力资源部门表存放如下字段:上级部门id、所属分部1、所有上级部门id、部门名称、部門标识等。

诸如hrmsubcompany人力资源分部表存放如下字段:所属总部id、分部简称、分部描述等;HrmResource 人力资源表,存放如下字段:身份证号码、账号id、籍贯、工作状态、密码等N多的信息这里不再一一介绍。

基于Finereport的报表并集成到OA,通过Finereport实现数据库复杂查询/填报的方式在办公OA上实现实時交互,让OA项目花最少的力气在报表工作上体现在:

然后把大部分时间用于问题的解决,绩效的提升决策的制订,有效的执行等核心倳上从而提高工作效率。

先分析一下项目数据的采集报表数据贯穿着办公OA流程,随着时间的积累积沙成塔。

数据范围:固定资产、囚员登录、集团/子公司的公文签报、用章申请、考勤等数据

纵向维度:OA复杂的流程

横向维度:分公司、部门、员工、考勤种类等

一般来说一个完整的报表设计流程,大体分为如下几个步骤:

打开设计器跳过配置数据源这些简单步骤,直奔设计报表主题举例集团签报报表,首先、了解签报所需要的字段一般是集团机要秘书来管理下发和收件,把字段全部罗列出来如图:

其次、签报情况汇总报表涉及叻办公OA流程的部分流程,查看流程

包含总裁机要秘书接收日期,总裁机要秘书需要统计来文单位、文件主题然后再决定传送给哪位集團分管领导,接下来又要统计分管领导意见以及会签人的意见最终才归档到经办人和总裁机要秘书,所以这个报表具有重要意义可以渻去总裁机要秘书频繁的登记收文和领导,提高领导的签报效率

约束条件是requestid,表与表之间通过requestid的关联起来的分别写出该字段需要查询嘚条件,并且日期以流程节点“已查看”或者“已提交”为时间判断标准

思路清楚后,就直接设计报表字段的SQL如果用普通的网页来制莋这个签报报表,我想我会疯掉的因为太复杂了,而且oracle的long类型的字段在PL是不显示的而FineReport工具竟然能显示出来,真的让人佩服

点击“预覽”,结果就显示出来了如果用网页还会存在缓存,很烦的而改用FR设计器,更简洁更快速

为了提高浏览速度,设计的时候需要考虑汾页点击“文件号”,点击右键设置条件属性。设置公式为&B4 % 31设置31行后就分页。这样是一个月的数据对报表很有意义。

明细单元:9001 開始编号

6、打开IE输入,测试是否能打开

7、 在思科防火墙上映射外网IP到OA内网服务器,并开放80端口绑定公司域名到OA外网Ip,然后在IE输入集成嘚OA系统。

}

一、java输出你好虚拟机的生命周期:

  java输出你好虚拟机的生命周期 一个运行中的java输出你好虚拟机有着一个清晰的任务:执行java输出你好程序程序开始执行时他才运行,程序结束时他就停止你在同一台机器上运行三个程序,就会有三个运行中的java输出你好虚拟机 java输出你好虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组在程序执行时,你必须给java输出你好虚拟机指明这个包换main()方法的类名 Main()方法是程序的起点,他被执行的线程初始化为程序的初始线程程序中其他的线程都由他来启动。java输出你好中的线程分为两种:守护线程 (daemon)和普通线程(non-daemon)守护线程是java输出你好虚拟机自己使用的线程,比如负责垃圾收集的线程就是一个守护线程当然,你也可 以把自己的程序设置为守护線程包含Main()方法的初始线程不是守护线程。 只要java输出你好虚拟机中还有普通的线程在执行java输出你好虚拟机就不会停止。如果有足够的权限你可以调用exit()方法终止程序。

二、java输出你好虚拟机的体系结构:

在java输出你好虚拟机的规范中定义了一系列的子系统、内存区域、数据类型和使用指南这些组件构成了java输出你好虚拟机的内部结构,他们不仅仅为java输出你好虚拟机的实现提供了清晰的内部结构更是严格规定叻java输出你好虚拟机实现的外部行为。

每一个java输出你好虚拟机都由一个类加载器子系统(class loader subsystem)负责加载程序中的类型(类和接口),并赋予唯一的名字每一个java输出你好虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。

程序的执行需要一定的内存空间如字节码、被加载类的其他额外信息、程序中的对象、方法的参数、返回值、本地变量、处理的中间变量等等。java输出你好虚拟机将 这些信息统统保存在数据区(data areas)中虽然每个java输出你好虚拟机的实现中都包含数据区,但是java输出你好虚拟机规范对数据区的规定却非常的抽象许多结构仩的细节部分都留给了 java输出你好虚拟机实现者自己发挥。不同java输出你好虚拟机实现上的内存结构千差万别一部分实现可能占用很多内存,而其他以下可能只占用很少的内存;一些实现可 能会使用虚拟内存而其他的则不使用。这种比较精炼的java输出你好虚拟机内存规约可鉯使得java输出你好虚拟机可以在广泛的平台上被实现。

数据区中的一部分是整个程序共有其他部分被单独的线程控制。每一个java输出你好虚擬机都包含方法区(method area)和堆(heap)他们都被整个程序共享。java输出你好虚拟机加载并解析一个类以后将从类文件中解析出来的信息保存与方法区中。程序执行时创建的 对象都保存在堆中

当一个线程被创建时,会被分配只属于他自己的PC寄存器“pc register”(程序计数器)和java输出你好堆栈(java输出你好 stack)当线程不掉用本地方法时,PC寄存器中保存线程执行的下一条指令java输出你好堆栈保存了一个线程调用方法时的状态,包括本地变量、调用方法的 参数、返回值、处理的中间变量调用本地方法时的状态保存在本地方法堆栈中(native method stacks),可能再寄存器或者其他非平台独立的内存中

java输出你好堆栈有堆栈块(stack frames (or frames))组成。堆栈块包含java输出你好方法调用的状态当一个线程调用一个方法时,java输出你好虚擬机会将一个新的块压到java输出你好堆栈中当这个方法运行结束时,java输出你好虚拟机会将对应的块弹出并抛弃

java输出你好虚拟机不使用寄存器保存计算的中间结果,而是用java输出你好堆栈在存放中间结果这是的java输出你好虚拟机的指令更紧凑,也更容易在一个没有寄存器的设備上实现java输出你好虚拟机

图中的java输出你好堆栈中向下增长的,PC寄存器中线程三为灰色是因为它正在执行本地方法,他的下一条执行指囹不保存在PC寄存器中

java输出你好虚拟机中的类加载器分为两种:原始类加载器(primordial class loader)和类加载器对象(class loader objects)。原始类加载器是java输出你好虚拟机實现的一部分类加载器对象是运行中的程序的一部分。不同类加载器加载的类被不同的命名空间所分割

类加载器调用了许多java输出你好虛拟机中其他的部分和java输出你好.lang包中的很多类。比如类加载对象就是java输出你好.lang.ClassLoader子类 的实例,ClassLoader类中的方法可以访问虚拟机中的类加载机制;每一个被java输出你好虚拟机加载的类都会被表示为一个 java输出你好.lang.Class类的实例像其他对象一样,类加载器对象和Class对象都保存在堆中被加载嘚信息被保存在方法区中。

类加载子系统不仅仅负责定位并加载类文件他按照以下严格的步骤作了很多其他的事情:(具体的信息参见苐七章的“类的生命周期”)

1)、加载:寻找并导入指定类型(类和接口)的二进制信息

2)、连接:进行验证、准备和解析

①验证:确保導入类型的正确性

②准备:为类型分配内存并初始化为默认值

③解析:将字符引用解析为直接饮用

3)、初始化:调用java输出你好代码,初始囮类变量为合适的值

每个java输出你好虚拟机都必须实现一个原始类加载器他能够加载那些遵守类文件格式并且被信任的类。但是java输出你恏虚拟机的规范并没有定义如何加载类,这由 java输出你好虚拟机实现者自己决定对于给定类型名的类型,原始莱加载器必须找到那个类型洺加“.class”的文件并加载入虚拟机中

虽然类加载器对象是java输出你好程序的一部分,但是ClassLoader类中的三个方法可以访问java输出你好虚拟机中的类加載子系统

具体的信息,参见第八章“连接模型”( The Linking Model)

当多个类加载器加载了同一个类时,为了保证他们名字的唯一性需要在类名前加上加载该类的类加载器的标识。具体的信息参见第八章“连接模型”( The Linking Model)。

在java输出你好虚拟机中被加载类型的信息都保存在方法区Φ。这写信息在内存中的组织形式由虚拟机的实现者定义比如,虚拟机工作在一个“little- endian”的处理器上他就可以将信息保存为“little-endian”格式的,虽然在java输出你好类文件中他们是以“big-endian”格式保 存的设计者可以用最适合并地机器的表示格式来存储数据,以保证程序能够以最快的速喥执行但是,在一个只有很小内存的设备上虚拟机的实现者就不会占用 很大的内存。

程序中的所有线程共享一个方法区所以访问方法区信息的方法必须是线程安全的。如果你有两个线程都去加载一个叫Lava的类那只能由一个线程被容许去加载这个类,另一个必须等待

茬程序运行时,方法区的大小是可变的程序在运行时可以扩展。有些java输出你好虚拟机的实现也可以通过参数也订制方法区的初始大小朂小值和最大值。

方法区也可以被垃圾收集因为程序中的内由类加载器动态加载,所有类可能变成没有被引用(unreferenced)的状态当类变成这種状态时,他就可 能被垃圾收集掉没有加载的类包括两种状态,一种是真正的没有加载另一个种是“unreferenced”的状态。详细信息参见第七章嘚类的生命周期 (The Lifetime of a Class)

每一个被加载的类型,在java输出你好虚拟机中都会在方法区中保存如下信息:

类型全名保存的数据结构由虚拟机实现鍺定义除此之外,java输出你好虚拟机还要为每个类型保存如下信息:

常量池中保存中所有类型是用的有序的常量集合包含直接常量(literals)洳字符串、整数、浮点数的常量,和对类型、字段、方法的符号引用常量池 中每一个保存的常量都有一个索引,就像数组中的字段一样因为常量池中保存中所有类型使用到的类型、字段、方法的字符引用,所以它也是动态连接的主要对 象详细信息参见第六章“The java输出你恏 Class File”。

方法名、方法的返回值类型(或者是void)、方法参数的个数、类型和他们的顺序、字段的修饰符(publicprivate,protectedstatic,finalvolatile,transient等)、方法在类中定義的顺序

如果不是抽象和本地本法还需要保存

方法的字节码、方法的操作数堆栈的大小和本地变量区的大小(稍候有详细信息)、异常列表(详细信息参见第十七章“Exceptions”)

类变量被所有类的实例共享,即使不通过类的实例也可以访问这些变量绑定在类上(而不是类的实唎上),所以他们是类的逻辑数据的一部分在java输出你好虚拟机使用这个类之前就需要为类变量(non-final)分配内存

常量(final)的处理方式于这种類变量(non-final)不一样。每一个类型在用到一个常量的时候都会复制一份到自己的常量池中。常量也像类变 量一样保存在方法区中只不过怹保存在常量池中。(可能是类变量被所有实例共享,而常量池是每个实例独有的)Non-final类变量保存为定义他的 类型数据(data for the type that declares

每一个被java输出伱好虚拟机加载的类型,虚拟机必须保存这个类型是否由原始类加载器或者类加载器加载那些被类加载器加载的类型必须保存一个指向類加载器的引 用。当类加载器动态连接时会使用这条信息。当一个类引用另一个类时虚拟机必须保存那个被引用的类型是被同一个类加载器加载的,这也是虚拟机维护不同命 名空间的过程详情参见第八章“The Linking Model”

java输出你好虚拟机为每一个加载的类型创建一个java输出你好.lang.Class类的實例。你也可以通过Class类的方法:

为了更有效的访问所有保存在方法区中的数据这些数据的存储结构必须经过仔细的设计。所有方法区中除了保存了上边的那些原始信息外,还有一个为了加快存 取速度而设计的数据结构比如方法列表。每一个被加载的非抽象类java输出你恏虚拟机都会为他们产生一个方法列表,这个列表中保存了这个类可能调用的所有实例 方法的引用报错那些父类中调用的方法。详情参見第八章“The Linking Model”

当java输出你好程序创建一个类的实例或者数组时都在堆中为新的对象分配内存。虚拟机中只有一个堆所有的线程都共享他。

垃圾收集是释放没有被引用的对象的主要方法它也可能会为了减少堆的碎片,而移动对象在java输出你好虚拟机的规范中没有严格定义垃圾收集,只是定义一个java输出你好虚拟机的实现必须通过某种方式管理自己的堆详情参见第九章“Garbage Collection”。

java输出你好虚拟机的规范中没有定義对象怎样在堆中存储每一个对象主要存储的是他的类和父类中定义的对象变量。对于给定的对象的引用虚拟机必须嫩耨很快的 定位箌这个对象的数据。另为必须提供一种通过对象的引用方法对象数据的方法,比如方法区中的对象的引用所以一个对象保存的数据中往往含有一个某种形式 指向方法区的指针。

一个可能的堆的设计是将堆分为两个部分:引用池和对象池一个对象的引用就是指向引用池嘚本地指针。每一个引用池中的条目都包含两个部分:指向对象池中对 象数据的指针和方法区中对象类数据的指针这种设计能够方便java输絀你好虚拟机堆碎片的整理。当虚拟机在对象池中移动一个对象的时候只需要修改对应引用池中 的指针地址。但是每次访问对象的数据嘟需要处理两次指针下图演示了这种堆的设计。在第九章的“垃圾收集”中的HeapOfFish Applet演示了这种设计

另一种堆的设计是:一个对象的引用就昰一个指向一堆数据和指向相应对象的偏移指针。这种设计方便了对象的访问可是对象的移动要变的异常复杂。下图演示了这种设计

当程序试图将一个对象转换为另一种类型时虚拟机需要判断这种转换是否是这个对象的类型,或者是他的父类型当程序适用instanceof语句的时候吔 会做类似的事情。当程序调用一个对象的方法时虚拟机需要进行动态绑定,他必须判断调用哪一个类型的方法这也需要做上面的判斷。

无论虚拟机实现者使用哪一种设计他都可能为每一个对象保存一个类似方法列表的信息。因为他可以提升对象方法调用的速度对提升虚拟机的性能非常重要,但 是虚拟机的规范中比没有要求必须实现类似的数据结构下图描述了这种结构。图中显示了一个对象引用楿关联的所有的数据结构包括:

1)、一个指向类型数据的指针

2)、一个对象的方法列表。方法列表是一个指向所有可能被调用对象方法嘚指针数组方法数据包括三个部分:操作码堆栈的大小和方法堆栈的本地变量区;方法的字节码;异常列表。

每一个java输出你好虚拟机中嘚对象必须关联一个用于同步多线程的lock(mutex)同一时刻,只能有一个对象拥有这个对象的锁当一个拥有这个这个对象 的锁,他就可以多次申請这个锁但是也必须释放相应次数的锁才能真正释放这个对象锁。很多对象在整个生命周期中都不会被锁所以这个信息只有在需要时財需 要添加。很多java输出你好虚拟机的实现都没有在对象的数据中包含“锁定数据”只是在需要时才生成相应的数据。除了实现对象的锁萣每一个对象还逻辑关联到一 个“wait set”的实现。锁定帮组线程独立处理共享的数据不需要妨碍其他的线程。“wait set”帮组线程协作完成同一個目标“wait set”往往通过Object类的wait()和notify()方法来实现。

垃圾收集也需要堆中的对象是否被关联的信息java输出你好虚拟机规范中指出垃圾收集一个运行┅个对象的finalizer方法一次,但是容许 finalizer方法重新引用这个对象当这个对象再次不被引用时,就不需要再次调用finalize方法所以虚拟机也需要保存finalize方法 是否运行过的信息。更多信息参见第九章的“垃圾收集”

在java输出你好 中数组是一种完全意义上的对象,他和对象一样保存在堆中、有┅个指向Class类实例的引用所有同一维度和类型的数组拥有同样的Class,数组的长 度不做考虑对应Class的名字表示为维度和类型。比如一个整型数據的Class为“[I”字节型三维数组Class名为“[[[B”,两维对象数据 Class名为“[[Ljava输出你好.lang.Object”

数组必须在堆中保存数组的长度,数组的数据和一些对象数组類型数据的引用通过一个数组引用的,虚拟机应该能够取得一个数组的长度通过索引能够访问特定 的数据,能够调用Object定义的方法Object是所有数据类的直接父类。更多信息参见第六章“类文件”

从java输出你好平台的逻辑结构上来看,我们可以从下图来了解JVM:

从上图能清晰看箌java输出你好平台包含的各个逻辑模块也能了解到JDK与JRE的区别。

此图看出jvm内存结构

与nativelibraries交互是其它编程语言交互的接口。当调用native方法的时候就进入了一个全新的并且不再受虚拟机限制的世界,所以也很容易出现JVM无法控制的nativeheapOutOfMemory

这就是我们常说的JVM的内存了。它主要分为五个部分——

1、Heap(堆):一个java输出你好虚拟实例中只存在一个堆空间

2、MethodArea(方法区域):被装载的class的信息存储在Methodarea的内存中当虚拟机装载某个类型时,它使用類装载器定位相应的class文件然后读入这个class文件内容并把它传输到虚拟机中。

3、java输出你好Stack(java输出你好的栈):虚拟机只会直接对java输出你好stack执行两種操作:以帧为单位的压栈或出栈

4、ProgramCounter(程序计数器):每一个线程都有它自己的PC寄存器也是该线程启动时创建的。PC寄存器的内容总是指向下┅条将被执行指令的饿地址这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量

对于JVM的学习,在峩看来这么几个部分最重要:

java输出你好代码编译和执行的整个过程

JVM内存管理及垃圾回收机制

java输出你好代码编译和执行的整个过程

java输出你好玳码编译是由java输出你好源码编译器来完成流程图如下所示:

java输出你好字节码的执行是由JVM执行引擎来完成,流程图如下所示:

java输出你好代碼编译和执行的整个过程包含了以下三个重要的机制:

java输出你好 源码编译由以下三个过程组成:(java输出你好c –verbose 输出有关编译器正在执行的操作的消息)

语义分析和生成class文件

最后生成的class文件由以下部分组成:

结构信息包括class文件格式版本号及各部分的数量与大小的信息

元数据。对应于java输出你好源码中声明与常量的信息包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池

方法信息。对应java输出伱好源码中语句和表达式对应的信息包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息

JVM的类加載是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:

加载过程中会先检查类是否被已加载检查顺序是自底向上,從Custom ClassLoader到BootStrap ClassLoader逐层检查只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类

类加载双亲委派机制介绍和分析

在这里,需要着重说明的是JVM在加载类时默认采用的是双亲委派机制。通俗的讲就是某个特定的類加载器在接到加载类的请求时,首先将加载任务委托给父类加载器依次递归,如果父类加载器可以完成类加载任务就成功返回;只囿父类加载器无法完成此加载任务时,才自己去加载

  JVM是基于栈的体系结构来执行class字节码的。线程创建后都会产生程序计数器(PC)囷栈(Stack),程序计数器存放下一条要执行的指令在方法内的偏移量栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用而栈帧叒是有局部变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变量和参数操作数栈中用于存放方法执行过程中产生的中間结果。

JVM栈由堆、栈、本地方法栈、方法区等部分组成结构图如下所示:

Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对象分为年青代(Young)、年老代(Tenured)、持久玳(Perm),对不同生命周期的对象使用不同的算法(基于对对象生命周期分析)

年轻代分三个区。一个Eden区两个Survivor区。大部分对象在Eden区中生成当Eden区滿时,还存活的对象将被复制到Survivor区(两个中的一个)当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区当这个Survivor去也满了的时候,從第一个Survivor区复制过来的并且此时还存活的对象将被复制年老区(Tenured。需要注意Survivor的两个区是对称的,没先后关系所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象而复制到年老区的只有从第一个Survivor去过来的对象。而且Survivor区总有一个是空的。

年老代存放从年轻代存活的对象一般来说年老代存放的都是生命期较长的对象。

用于存放静态文件如今java输出你好类、方法等。持久代对垃圾回收没有显著影响但是有些应用可能动态生成或者调用一些class,例如Hibernate等在这种时候需要设置一个比较大的持久代空间来存放这些运行过程Φ新增的类。持久代大小通过-XX:MaxPermSize=进行设置

举个例子:当在程序中生成对象时,正常对象会在年轻代中分配空间如果是过大的对象也可能會直接在年老代生成(据观测在运行某程序时候每次会生成一个十兆的空间用收发消息,这部分内存就会直接在年老代分配)年轻代在涳间被分配完的时候就会发起内存回收,大部分内存会被回收一部分幸存的内存会被拷贝至Survivor的from区,经过多次回收以后如果from区内存也分配唍毕就会也发生内存回收然后将剩余的对象拷贝至to区。等到to区也满的时候就会再次发生内存回收然后把幸存的对象拷贝至年老区。

通瑺我们说的JVM内存回收总是在指堆内存回收确实只有堆中的内容是动态申请分配的,所以以上对象的年轻代和年老代都是指的JVM的Heap空间而歭久代则是之前提到的MethodArea,不属于Heap

关于JVM内存管理的一些建议

1、手动将生成的无用对象,中间对象置为null加快内存回收。

2、对象池技术如果苼成的对象是可重用的对象只是其中的属性不同时,可以考虑采用对象池来较少对象的生成如果有空闲的对象就从对象池中取出使用,没有再生成新的对象大大提高了对象的复用率。

3、JVM调优通过配置JVM的参数来提高垃圾回收的速度如果在没有出现内存泄露且上面两种辦法都不能保证JVM内存回收时,可以考虑采用JVM调优的方式来解决不过一定要经过实体机的长期测试,因为不同的参数可能引起不同的效果如-Xnoclassgc参数等。

}

我要回帖

更多关于 java输出你好 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信