
JAVA的技术特点是什么
Java由美国SUN公司(被oracle公司收购)发明于1995年,是目前业界应用最广泛、使用人数最多的语言,连续多年排名世界第一,可以称之为“计算机语言界的英语”。
那么Java这么高的评价它的特点有哪些,下面我来为题主解答:
一、跨平台/可移植性
这是Java的核心优势。Java在设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。
Java首先利用文本编辑器编写 Java源程序,源文件的后缀名为java;再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为class; 最后利用虚拟机(解释器,java)解释执行。如下图所示:
二、安全性
Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以很容易构建防病毒,防篡改的系统。比如Java取消了强大但又危险的指针。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的。
三、面向对象
面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于C++为了照顾大量C语言使用者而兼容了C,使得自身仅仅成为了带类的C语言,多少影响了其面向对象的彻底性!Java则是完全的面向对象语言。
四、简单性
Java就是C++语法的简化版,我们也可以将Java称之为“C++-”。跟我念“C加加减”,指的就是将C++的一些内容去掉;比如:头文件,指针运算,结构,联合, *** 作符重载,虚基类等等。同时,由于语法基于C语言,因此学习起来完全不费力。
五、高性能
Java最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使Java程序的执行效率大大提高,某些代码甚至接近C++的效率。
因此,Java低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。
六、分布式
Java是为Internet的分布式环境设计的,因为它能够处理TCP/IP协议。事实上,通过URL访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。
七、多线程
多线程的使用可以带来更好的交互响应和实时行为。 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。
八、健壮性
Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。
以上几种特性你了解到啦吗? 记得给个赞!
当然这些还没完,Java除啦这些特性还有一些其他的特点我也来给你讲一讲!!
1java的风格类似C++,从某种意义上讲,java是C++的一个变种。但是java摒弃了C、C++中的容易引发错误和难以理解的指针,结构,以及内存管理等;
2java是一种强类型的语言,比C/C++检查还要严格,java区分大小写字母;
3java禁止非法访问内存,因为java没有指针,内存的申请和释放;
4对于不同的 *** 作系统,会有不同的java虚拟机,这也就决定了java的可移植性;
5java提供了自动垃圾回收机制gc,有效避免了C、C++的内存泄漏问题;
记得给个赞!
安卓开发中提高安卓程序效率的15小技巧
对于一个安卓开发者来说,安卓开发中的提高安卓程序效率也是一项重要的内容,到底如何提高安卓程序效率,如何优化安卓的性能呢?以下达内南宁安卓培训部老师介绍了15种优化安卓的性能的小技巧,希望对广大的安卓开发者有所帮助!
1>
>
2使用线程池,分为核心线程池和普通线程池,下载等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待
3尽量避免static成员变量引用资源耗费过多的实例,比如Context
4listview性能优化
1)异步加载
item中如果包含有webimage,那么最好异步加载
2)快速滑动时不显示
当快速滑动列表时(SCROLL_STATE_FLING),item中的或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来
3)复用convertView
在getItemView中,判断convertView是否为空,如果不为空,可复用。如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外。
4)BaseAdapter避免内存溢出
如果BaseAdapter的实体类有属性非常消耗内存,可以将保存到文件;为提高性能,可以进行缓存,并限制缓存大小。
5对于一个安卓开发者来说,安卓开发中的提高安卓程序效率也是一项重要的内容,到底如何提高安卓程序效率,如何优化安卓的性能呢?以下本文就介绍了15种优化安卓的性能的小技巧,希望对广大的安卓开发者有所帮助!
6保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursorclose掉;
7异步任务,分为核心任务和普通任务,只有核心任务中出现的系统级错误才会报错,异步任务的ui *** 作需要判断原activity是否处于激活状态;
8使用代替强引用,弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。
9超级大胖子Bitmap及时的销毁(Activity的onDestroy时将bitmap回收,在被UI组件使用后马上进行回收会抛:Canvas:tryingtousearecycledbitmapandroidgraphicsBitmap)设置一定的采样率(有开发者提供的无需进行采样,对于有用户上传或第三方的大小不可控,可进行采样减少所占的内存),从服务端返回,建议同时反馈的size巧妙的运用软引用drawable对应resid的资源,bitmap对应其他资源任何类型的,如果获取不到(例如文件不存在,或者读取文件时跑OutOfMemory异常),应该有对应的默认(默认放在在apk中,通过resid获取);
10Drawable中ui组件需要用到的是apk包自带的,那么一律用或者,而不要根据resourceid
注意:get((),Rdrawablebtn_achievement_normal)该方法通过resid转换为drawable,需要考虑回收的问题,如果drawable是对象私有对象,在对象销毁前是肯定不会释放内存的。
11复用、回收Activity对象临时的activity及时finish主界面设置为singleTask一般界面设置为singleTop。
12在onResume时设置该界面的电源管理,在onPause时取消设置。
13应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据事件主动触发界面的更新。
14如果ImageView的是来自网络,进行异步加载。
15位置信息获取用户的地理位置信息时,在需要获取数据的时候打开GPS,之后及时关闭掉。
程序的效率是每个程序员都应该重视的,无论您是采用哪一种语言进行开发 程序有时候越短,并不
一定越快,有时候程序很多代码,但不一定会很慢 性能是一把双刃剑, 获得时间效率的同时, 牺牲
的是空间的开销 这里提供一些建议以提高你的程序运行速度和减低系统荷载。
首先是尽量减少I/O *** 作,类似对硬盘的读写的I/O *** 作是最耗费时间的, 比如读写数据库。以下是
减少I/O *** 作的例子:
1, 减少数据库DB的读写 *** 作, 当使用VIEW视图的时候, 当被视图join的table有数据更新 *** 作的时
候, 同时系统也会更新到这个view里面, 使得它们之间的数据一样, 所以使用视图会对这些日常 ***
作带来效率问题 如果视图join的表多数是日常事物需要更新的事物数据表(如EKET), 就要避免
使用视图
2, 避免使用SELECT , 尽量使用SELECT A B C INTO TABLE ITAB这样的语句。这个 *** 作会将所有符
合条件的数据一次性地读进内表,这比在SELECT A B C INTO WA APPEND ENDSELECT的循环中
添加数据到内表要快。不用频繁的读DB
3, 避免频繁使用SELECT SINGLE语句, 特别是在LOOP和SELECTENDSELECT里面用, 应该把要读取
的数据用SELECT FOR ALL ENTRIES IN 一次全部取得, 然后用READ TABLE WITH KEY BINARY
SEARCH
虽然说 *** 作内存比磁盘 *** 作要高效,但是如果对内存的使用不加以控制,可能有些时候不得不对硬盘
的交换空间 *** 作, 这样就增加了对磁盘的I/O读写 *** 作正如下面所说:
4, 当你定义内表的时候可以也会出现这样的问题, 比如你定义一个内表使用的是OCCURS 100,而不
是OCCURS 0, 会导致内表长度大于100的时候,就会占用系统页面缓存。
5, Field-groups对于多层次的排序和显示是非常有用的。它是将数据写入系统的页面文件,而不是
内存(内表一般是使用内存的)。基于这个原因,field-groups比较适合于处理大量数据的列表(
一般超过50000条记录)。如果涉及大量的数据处理,应该首先和系统管理员协商来决定这个程序最
多能使用多少内存,以计算这个程序需要使用多少资源。然后你就可以决定是把数据写入内存还是
交换空间。
6, 用SORT代替ORDER BY, ORDER BY从句是执行在数据库服务器上, 而SORT是ABAP语句执行在应用服
务器上的 数据库服务器通常会形成性能瓶颈问题, 所以最好是吧数据导入内表做SORT
7, 避免使用SELECT DISTINCT语句, 因为当你用来判断唯一的字段为非索引字段时, 效率是十分的
低, 所以请导入内表SORT后, 使用DELETE ADJACENT DUPLICATES 来去重复
其次就是要减轻CPU的负载, 可以通过优化程序来改善,比如在程序中语句和算法, 以下是减低CPU
负载的优化例子:
1, 使用宏代替频繁函数调用 ABAP没有内联函数这个说法, 所以我们如果需要频繁调用函数时, 函
数调用有栈内存创建和释放的开销 在ABAP中可以用宏代码提高执行效率,宏代码不是函数但使用
起来像函数,编译器用复制宏代码的方式取代函数调用,省去了参数压栈、从而提高速度。注意使
用宏有缺点:(1)容易出错, 宏不能pass-by-value按值传递,用于代替实现函数功能时要十分注意!
(2)不可调试; (3)无法 *** 作类的私有数据成员
2, 避免使用过得的LOOP 和SELECT END SELECT 避免使用嵌套的LOOP 和SELECT END
SELECT
3, 尽可能多地使用表的KEY FIELD作为Where分句的条件选项。比如SELECT FROM BSEG WHERE
BUKRS = '1000' AND BELNR = '0100000007' AND GJAHR =
'2006' AND BUZEI = '003' 这里的四个字段BUKRS,BELNR,GJAHR,BUZEI 都
是BSEG表的KEY字段
4, 如果某些数据需要频繁的从不同表提取, 使用视图VIEW实现读取缓存可以提高效率 当视图连接
的是读取次数较多, 但写入不频繁的表时(比如物料主数据表MARA), 可以使用视图, 这样比在程序
里面简单用join要快,理论上join语句每次读取的速度都是一样的, 而视图是从读二次开始就快了,
而且cache使得网络负载减低
5, 使用SQL语句里面的JOIN时候, 应该避免JOIN的表不要超过3个, 否则严重影响效率 如果真的要
JOIN表3个以上的话, 正确的方法不是用视图VIEW, 而是使用SELECT INTO TABLE FOR ALL
ENTRIES IN 以及 READ TABLE WITH KEY BINARY SEARCH例如我们要提高读取BSEG表的性能,首先我
们会根据GJAHR主键从BKPF表取出部分数据到内表itab,然后使用FOR ALL ENTRIES IN itab WHERE
BSEG~BELNR = itab~BELNR 这样的的方法取得符合itab里所有条件的BSEG数据注意使用FOR ALL
ENTRIES要先CHECK作为条件的内表itab是否为空,还有作为WHERE的条件在这个内表里面是否会有空
值存在,否则无效
6, 注意使用CORRESPONDING FIELDS OF 和 MOVE-CORRESPONDING 时候会进行字段比较, 带来CPU的
开销大
7, 避免过得而频繁的数据类型转换,比如N转换为C,但是从N转换成STRING却是很快的,因为 *** 作
STRING比CHAR类型少了比较长度的时间
8, 使用二级索引提高DDIC的读写效率, 可以根据你的需要在SE11里面创建INDEX, 并让你程序里的
SQL查询语句里WHERE条件的顺序与你的索引顺序一致
9, 二分查找比线性查找要高效,READ TABLE的之前使用SORT TABLE BY XXX 某个表关键字段进行排
序, 然后使用READ TABLE WITH KEY XXX = 'XXX' BINARY SEARCH 这个就是所谓的二分
查找法的应用
10, 避免使用SQL语句动态查询条件,动态表名和动态字段名, 必要时候用宏或者子程序模块代替
11, 对于同一功能的函数和方法, 调用METHOD比调用FUNCTION要快
12, SORTED TABLE可以使用二分查找法取得节点, 其时间复杂度是O(log N),但是插入节点会慢,因
为要移动很多节点 而HASHED TABLE则是基于哈希算法的,其高效主要体现在把数据的存储和查找时
间大大降低,几乎可以看成是常数时间O(1),而代价是消耗比较多的内存,然而在硬件技术越来越
发达的今天,用空间换时间的做法在某种意义上是值得的。但是使用哈希表必须注意键值的唯一性
!如果键值会出现重复的话, 不能使用哈希表,只能用排序表和标准表。
13, 使用APPEND LINES(或者INSERT LINES) OF ITAB1 TO ITAB2 比 LOOP AT ITAB1 INTO WA
APPEND(INSERT) WA TO ITAB2 ENDLOOP 要高效
14, 使用效率比较高的COLLECT, DELETE ADJACENT DUPLICATES FROM语句。
15, 使用高效的CONTEXT SQL语句如以下代码2比代码1要快10倍以上!
代码1:
SELECT FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS
SELECT SINGLE AIRPFROM AIRPTO INTO (AP1, AP2)
FROM SPFLI
WHERE CARRID = SBOOK_WA-CARRID
AND CONNID = SBOOK_WA-CONNID
SELECT SINGLE NAME INTO NAME1 FROM SAIRPORT
WHERE ID = AP1
SELECT SINGLE NAME INTO NAME2 FROM SAIRPORT
WHERE ID = AP2
ENDSELECT
代码2:
SELECT FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS
SUPPLY CARRID = SBOOK_WA-CARRID
CONNID = SBOOK_WA-CONNID
TO CONTEXT TRAV1
DEMAND AIRPFROM = AP1
AIRPTO = AP2
NAME_FROM = NAME1
NAME_TO = NAME2
FROM CONTEXT TRAV1
ENDSELECT
最后是注意内存的使用,以下是内存优化方面的例子:
1, 虽然ABAP拥有垃圾处理的机制, 但是这个是在程序运行完成后实现的 所以我们尽量把无用的变
量,内表,对象都释放掉;
2, 尽量减少无用的静态定义的变量,内表和对象, 因为静态定义的对象会在编译开始就占有内存空
间;
3, 尽量减少网络的传输负载, 比如在设计RFC远程调用传回的内表数据要尽量精简, 数据量越大,对
CPU和内存需求越多;
4, 内存使用紧张的情况下, 使用FREE语句, 以及SQL语句的PACKAGE SIZE n 选项
SELECT vbeln erdat
FROM vbak
INTO TABLE li_vbak PACKAGE SIZE 50
1提高代码的规范性。编码规范 可以提高代码的可读性,并且在代码修改的时候很容易。
2对功能进行分类,并拆分。分析出几种处理逻辑。编写代码时,部分代码可以copy。可以提编码速度。
3对功能进行分类,并合并。提出共通类。
4不同的package对应不同的功能。
简单的说,每天写几百行代码。坚持半年或者1年,就知道什么方式是适合你的了。 不写代码,光想,十年也还是那个水平。每个人的逻辑思维是不一样的,写代码的方式也是不一样的。有时间问,还不如多写写。或者,自己模拟现实个场景(或公司管理制度之类的),然后实现。写几个,很自然的就知道自己该怎么写了。
以上就是关于JAVA的技术特点是什么全部的内容,包括:JAVA的技术特点是什么、安卓开发中提高安卓程序效率的15小技巧、如何提高ABAP程序运行效率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)