仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 670|回复: 11
打印 上一主题 下一主题

[学习教程] 发布一篇Java实际与理论: 静态编译与功能丈量

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)
这个月,我动手撰写一篇文章,剖析一个写得很糟的微评测。究竟,我们的程序员一向受功能困扰,我们也都想懂得我们编写、利用或品评的代码的功能特性。当我偶尔间写到功能这个主题时,我常常失掉如许的电子邮件:“我写的这个程序显现,静态frosternation要比静态blestification快,与您上一篇的概念相反!”很多随这类电子邮件而来的所谓“评测“程序,大概它们运转的体例,分明体现出他们关于JVM实行字节码的实践体例缺少基础熟悉。以是,在我动手撰写如许一篇文章(将在将来的专栏中宣布)之前,我们先来看看JVM幕后的工具。了解静态编译和优化,是了解怎样辨别微评测优劣的关头(不幸的是,好的微评测很少)。
静态编译简史
Java使用程序的编译历程与静态编译言语(比方C或C++)分歧。静态编译器间接把源代码转换成能够间接在方针平台上实行的呆板代码,分歧的硬件平台请求分歧的编译器。Java编译器把Java源代码转换成可移植的JVM字节码,所谓字节码指的是JVM的“假造呆板指令”。与静态编译器分歧,javac几近不做甚么优化——在静态编译言语中应该由编译器举行的优化事情,在Java中是在程序实行的时分,由运转时实行。
第一代JVM完整是注释的。JVM注释字节码,而不是把字节码编译成呆板码并间接实行呆板码。固然,这类手艺不会供应最好的功能,由于体系在实行注释器上消费的工夫,比在必要运转的程序上消费的工夫还要多。
立即编译
关于证明观点的完成来讲,注释是符合的,可是初期的JVM因为太慢,敏捷取得了一个坏名声。下一代JVM利用立即(JIT)编译器来进步实行速率。依照严厉的界说,基于JIT的假造机在实行之前,把一切字节码转换成呆板码,但是以惰性体例来做这项事情:JIT只要在断定某个代码路径将要实行的时分,才编译这个代码路径(因而有了称号“立即编译”)。这个手艺使程序能启动得更快,由于在入手下手实行之前,不必要冗杂的编译阶段。
JIT手艺看起来很有出路,可是它有一些不敷。JIT打消懂得释的包袱(以分外的启动本钱为价值),可是因为多少缘故原由,代码的优化品级仍旧是一样平常般。为了不Java使用程序严峻的启动提早,JIT编译器必需十分敏捷,这意味着它没法把大批工夫花在优化上。以是,初期的JIT编译器在举行内联假定(inliningassumption)方面对照守旧,由于它们不晓得前面大概要装进哪一个类。
固然从手艺上讲,基于JIT的假造机在实行字节码之前,要先编译字节码,可是JIT这个术语一般被用来暗示任何把字节码转换成呆板码的静态编译历程——即便那些可以注释字节码的历程也算。
HotSpot静态编译
HotSpot实行历程组合了编译、功能剖析和静态编译。它没有把一切要执行的字节码转换成呆板码,而是先以注释器的体例运转,只编译“抢手”代码——实行得最频仍的代码。当HotSpot实行时,会汇集功能剖析数据,用来决定哪一个代码段实行得充足频仍,值得编译。只编译实行最频仍的代码有几项功能上风:没有把工夫华侈在编译那些不常常实行的代码上;如许,编译器就能够花更多工夫来优化抢手代码路径,由于它晓得在这下面花的工夫物有所值。并且,经由过程提早编译,编译器能够会见功能剖析数据,并用这些数据来改善优化决议,比方是不是必要内联某个办法挪用。
为了让事变变得更庞大,HotSpot供应了两个编译器:客户机编译器和服务器编译器。默许接纳客户机编译器;在启动JVM时,您能够指定-server开关,选择服务器编译器。服务器编译器针对最年夜峰值操纵速率举行了优化,合用于必要临时运转的服务器使用程序。客户机编译器的优化方针,是削减使用程序的启动工夫和内存损耗,优化的庞大水平远远低于服务器编译器,因而必要的编译工夫也更少。
HotSpot服务器编译器可以实行各类样的类。它可以实行很多静态编译器中罕见的尺度优化,比方代码提拔(hoisting)、大众的子表达式扫除、轮回睁开(unrolling)、局限检测扫除、逝世代码扫除、数据流剖析,另有各类在静态编译言语中不有用的优化手艺,比方虚办法挪用的聚合内联。
<p>
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。
海妖 该用户已被删除
沙发
发表于 2015-1-21 05:50:46 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
飘灵儿 该用户已被删除
板凳
发表于 2015-1-24 12:40:33 来自手机 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
乐观 该用户已被删除
地板
发表于 2015-2-1 11:47:17 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
小妖女 该用户已被删除
5#
发表于 2015-2-5 10:09:00 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
再见西城 该用户已被删除
6#
发表于 2015-2-11 08:20:44 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
深爱那片海 该用户已被删除
7#
发表于 2015-2-12 08:46:26 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
因胸联盟 该用户已被删除
8#
发表于 2015-2-20 00:44:48 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
不帅 该用户已被删除
9#
发表于 2015-2-21 07:37:29 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
若天明 该用户已被删除
10#
发表于 2015-3-6 19:58:33 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-13 07:09:30 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
灵魂腐蚀 该用户已被删除
12#
发表于 2015-3-20 16:14:03 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 21:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表