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. 在Xcode 6 beta里编译Cocos2d-x iOS项目时失败

    转载 在Xcode 6 beta里编译Cocos2d-x iOS项目时可能会失败,提示如下错误: Undefined symbols for architecture i386: "_fwr ...

  2. MongoDB学习笔记-01 简介、安装

    MongoDB简介 MongoDB是一种强大.灵活.可拓展的存储方式.是一个面向文档(相当于"行"的概念)的数据库. 可拓展:通过添加服务器而增加存储量. Windows下安装 版 ...

  3. 64位系统 IIS中应用程序池设置导致 访问数据库错误

    64 位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接.导致程序里面的数 ...

  4. SSM+DUBBO/ZK异常

    1.Could not find resource(mybatis本身不支持通配符,是spring提供的ant匹配法) 2.ClassNotFoundException: org.I0Itec.zkc ...

  5. CodeSoft随笔 批量连续打印,变量打印,codesoft条码

    调用codeSoft的模板,实现批量连续打印. Code: 制作标签1.lab. 添加两个变量var0,var1. using LabelManager2; string strFile = Syst ...

  6. Android中将布局文件转成bitmap

    在实践中发现,有些需要打印的小票高度小于屏幕的高度,而有些小票内容过多高度高于屏幕高度. 小于屏幕高度的布局文件转成bitmap较为容易,高于屏幕高度的布局文件转成长图bitmap较为复杂. 一.小于 ...

  7. UIViewController的生命周期(根视图view从无到有的过程)

    UIViewController的生命周期实质上是指根视图view从无到有的过程 1.首先新建一个工程:不从mainstoryBoard加载 (删除入口) 在AppDelegate.m --> ...

  8. STM32串口接收不定长数据原理与源程序(转)

    今天说一下STM32单片机的接收不定长度字节数据的方法.由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的A ...

  9. JS中json数据的处理

    1.  json数据结构(对象和数组) json对象:var obj = {"name":"xiao","age":12}; json数组: ...

  10. Database Schemas Found in Oracle E-Business Suite

    https://docs.oracle.com/cd/E26401_01/doc.122/e22952/T156458T659606.htm Table of Database Schemas in ...