Java语言的个人理解(比价深层次吧)

大四的生活确实十分的奢靡,不锻炼,不读书,几乎就是当一天和尚撞一天钟的生活,太颓废了,还好自己不是这个样子,不过身体确实差了很多,昨天跑了一圈内环(4KM),今天就走不动路了,所以还是过一些比较充实的生活。还是回到学习上来吧,这一节主要的是“水”(粤方言)一下关于Java的宏观知识。

作为Java语言的爱好者,应该对于Java语言有着比较深入的认识,不但要认识到这门编程语言的优点,也应该关注他的缺点。这样才会让我们在实际的开发中避开这些缺点,或者是找一些其他比较好的方法进行那个替换。同时呢,还应该对于语言的未来发展趋势有一个很好的把握。

自由开源之路

Java语言是Sun公司私有的实现的,并且有Sun公司制定标准。在相当长的一段时间内,Sun都是Java的标准,而且是主导这门语言的大哥。但是这样的发展模式这样不能够满足所有的市场需求。同时使用厂家的平台系统使用的是Java,而且都是核心业务,这就难免让企业产生一定的顾虑:我们的核心业务都是基于Java平台构建的,但是这个平台本身确实其它一家公司的私有技术,你哪一天抽风,不让我们使用了,我们岂不是悲剧了,所以Sun公司开始了Java平台的开放化过程。其实这也正是Java之所以如此盛行的关键因素。

计算机的发展,有两个东西我特别推崇,一个是Linux之父Torvalds,因为他的开放自己的研究的linux内核源代码,并且依靠互联网平台作用,更新维护自己的linux内核,才有今天各种免费的linux操作系统,而且Android OS也是基于linux内核的操作系统(虽然我只是linux的菜鸟);再者就是Java语言,也是凭借社区的力量发展起来的,并且自由开源。对于这两种技术,我超喜欢,所以在大二上的时候开始学习Java语言,而且一直不断的深入,在学习Java的时候,每当深入的学习,就会发现自己需要学习的东西还有太多太多。最近发现于是王高层走,于是发现太多的东西,根本学不过来,不过这些东西都是可以很快的掌握。于是我转向了底层,也就是语言本身的实现。因为几乎所有的Java的东西都是开源的,所以我也想深入到源代码级别研究这些东西,于是昨天我下载来openJDK的源代码,感觉超厉害的样子,自己慢慢研究! Linux的话,我也会继续深入的学习下去。

回到Sun公司的公开Java的实现上,Sun公司在后来将Java 内部实现和标准几乎完全公布,除了少部分因为涉及版权,但是这些也是可以在Java社区找到相应的替代品。同时公布自己的Java和JVM规范,于是开源社区根据这一标准实现了一个叫做OpenJDK的Java自由开源实现版本。从此企业就不再担心自己会被Java“掐住脖子”了。

Coin项目:为什么有这个项目呢?这个和Java语言的发展有很大的关系。OpenJDK的Java自由开放源代码的实现,同时OpenJDK中有一个Coin组织,引用官方的话“The goal of Project Coin is to determine what set of small language changes should be added to JDK 7.”所以Coin在Java升级中起到了很关键的作用。而且Coin依靠的不是什么国际组织,而是开放的平台社区。这也是Java为什么如此流行的最重要的原因。

  Java为了走的是平台路线而不仅仅是一种语言

对于Java语言的认识我们应该更加深入,Java的运行效率是比较差的,因为他是居于JVM运行的,JVM则是使用C/C++实现的,所以造成了效率比C/C++低。之后有很多的开发语言比如Ruby, Python等等有专门的JVM运行版本Jruby,Jython,他们将自己的源代码编译成为标准的字节码,就可以运行在JVM上,给Java语言本身带来了相当大的挑战。

  但是Java语言不会就此死掉,相反Java语言做的是一个平台而不是一种语言,这些语言只要运行在JVM上,Java就会一直盛行下去。很多的语言支持JVM运行,是因为历史的原因,在Java社区中有大量优秀的JAVA包,这些JAR包是字节码,可以直接在JVM上面运行,其他语言就为了使用这些JAR包,所以将自己的源代码也编译成符合标准的字节码,运行在JVM上面,这样就可以调用那些开源的JAR包。20多年的发展,Java语言中有大量的资源是不能够随时被其他的编程语言所替代,所以依托JVM运行标准的字节码,将Java做成一个平台,而不仅仅是一种语言。

  Java中的效率和C/C++比起来确实比较低效,Java如此好的封装机制,带来了很大的优点,但是也正是这个原因造成的Java效率的低下;同时还有比较敏感的内存管理,Java中屏蔽了底层的实现,而不像C/C++那样,对于程序员透明。其实C/C++的内存管理掌握之后反而到感觉的简单,因为就是申请一块内存就对应的释放一块内存,就没了;但是Java的内存管理真的很头疼的,不要以为Java程序就不用考虑内存管理了,如果这样,在大型项目中,我们的程序就可能直接死掉,因为分配内存失败。同时还可能会因为JVM一直忙碌于回收内存,这样降低程序的性能,总之就是很悲剧!也正是因为这一点,现在有点不怎么喜欢Java了。

  以上就是目前对于Java语言的理解看一些看法,不同的时期,不同的自己,对于同一件事情也就会有不同的认识,将来的话,也许对于Java语言会有一些新的认识,也许就在明天!

追寻梦的飞飞

2014.04.02 于广州

Java语言的个人理解的更多相关文章

  1. 对于JAVA语言的一点理解

    java作为一门面向对象的语言,现在常常被用于企业服务器端的后台开发.同时,C语言可能更多地是用于嵌入式的开发,所谓的嵌入式就是航天飞机上的设备软件之类的东西.但是,我逐渐发现,我们平时所说的java ...

  2. 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势

    0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...

  3. java语言浅显理解

    从厉害的c语言.到经久不衰的java语言.到不太火的安卓和IOS,到当下流行的python,这些都是软件开发中的一员. 之前在传智播客上的免费视频资源上,听了老师对java语言的介绍,感觉挺好了.今天 ...

  4. 《深入理解Java 7核心技术与最佳实践》读书笔记(2) Java语言动态性引言

    Java语言是一种静态类型的编程语言.静态类型的含义是指在编译时进行类型检查.Java源代码中的每个变量的类型都要显式地进行声明.所有变量.方法的参数和方法返回值的类型在程序运行之前就必须是已知的.J ...

  5. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  6. 用Java语言编写一个简易画板

    讲了三篇概博客的概念,今天,我们来一点实际的东西.我们来探讨一下如何用Java语言,编写一块简易的画图板. 一.需求分析 无论我们使用什么语言,去编写一个什么样的项目,我们的第一步,总是去分析这个项目 ...

  7. 20145205 java语言实现数据结构实验一

    数据结构实验要求 综合类实验设计3 已知有一组数据a1a2a3a4--anb1b2b3b4--bm,其中ai均大于bj,但是a1到an和b1到bm不是有序的,试设计两到三个算法完成数据排序,且把bj数 ...

  8. 瘋耔java语言笔记

    一◐ java概述                                                                                        1.1 ...

  9. Java中static的理解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

随机推荐

  1. Oracle学习笔记1

    查看登录用户 show user; 启用scott用户 alter user scott account unlock; 操作表空间 select * from dba_tablespaces; se ...

  2. Angular概念纵览

    Conceptual Overview Template(模板): HTML with additional markup (就是增加了新的标记的HTML) Directive(指令): extend ...

  3. 各种UIButton

    前几日尝试了各种UIButton  UIButton *btn0=[UIButton buttonWithType:UIButtonTypeContactAdd]; UIButton *btn1=[U ...

  4. video标签的属性和方法总结

    最近想做一个弹幕插件,查了很多video标签的属性和方法 error属性 在正常读取时候,使用媒体数据的过程中,video元素或audio元素的error属性为null,但是任何时候只要出现错误,er ...

  5. python socket server源码学习

    原文请见:http://www.cnblogs.com/wupeiqi/articles/5040823.html 这里就是自己简单整理一下: #!/usr/bin/env python # -*- ...

  6. XStream学习笔记

    XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...

  7. 《Memcache学习总结》[PDF]发布

    <Memcache学习总结>[PDF]发布 百度网盘共享: http://pan.baidu.com/s/1mgvayQO  版本号: V1.2 最后跟新: 2015-04-01 讨论组: ...

  8. 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)

    该书英文配套答案 Answer to Exercise -, page Revise the main routine of the longest-line program so it will c ...

  9. poj 1195 - Mobile phones(树状数组)

    二维的树状数组,,, 记得矩阵的求和运算要想好在写.... 代码如下: #include <cstdio> #include <cstdlib> #include <cm ...

  10. cocos2d-x 2.2.2 android平台移植

    1.完成以上工具的下载安装--cocos2d-x 2.2.2 --eclipse+adt+sdk --ndk 2.创建cocos2d-x工程 在"cocos2d-x-2.2.2\tools\ ...