Java、JVM和操作系统之间的关系,写给新人,

来张图:这个帖子写给新人的,老玩家就直接无视他,因为这个完完全全是白话基础原理。

解释:上面的图是从上往下依次调用的关系。

操作系统(Windows/Linux)管理硬件,让硬件能够正常、合理的运行,当然各种硬件的驱动实现了操作系统的接口,操作系统调用这些接口就能管理硬件,操作系统还像程序员提供了一层接口,叫做系统呼叫层,程序员可以面向这一层的接口编程,来实现对计算机的控制,而不同的操作系统(或者说不同的CPU架构)所提供的接口都是不一样的,Windows和Linux提供给的那肯定是完全不一样的,虽然站在最终的角度来看都能实现某一功能。所以同样一个程序是不能在不同的系统上运行的,甚至可能在同一个系统的不同版本都不一定能完美运行,这就是所谓的平台相关的程序,比如C/C++程序,然而计算机和互联网的飞速发展,计算机种类和型号千千万,操作系统也有很多种类,Window、Linux、iOS等,同样一款软件不能不做改变就在不同的操作系统上面运行,这对开发者来说不是很友好。Java语言就能解决这个平台(说成是Java平台更准确,JVM+JavaAPI),鉴于不同的操作系统所需要的程序是不一样的,那么就可以寻找一个方法来解决这个问题,于是JVM就诞生了,又JVM来向下关联所有操作系统,他能操作所有操作系统,向上提供统一接口,也就是JavaAPI,开发者只需要面向JVM(JavaAPI)编程,至于JVM是如何各种不同的操作系统打交道开发者完全不用管,管他是怎么沟通交流的,于是只要面向JVM+JavaAPI编程,一个程序可以在任意操作系统平台上面运行,这就是所谓的跨平台,Java代码和平台是无关的,没有任何关系。---而这,就是Java的跨平台性质。

  其实这个理念跟Linux的shell是一样的,Linux操作系统管理硬件,Linux向上提供统一接口,而Shell(就等于是上面的JVM)作为命令输入这和操作系统接口的中间人,中间人会将输入的命令解释给操作系统接口来管理和调用各种硬件,只不过shell没有JVM做得那么彻底,这也就是为什么对于那么多不同的shell来说,输入的命令都基本上是一样的的道理。

  举个例子:我们国家有很多方言,比如广东人至听得懂广东话,四川人只听得懂四川话,天津人只听得懂天津话,这些方言就是所谓的地域相关的语言,对应计算机软件来说就是平台相关性,如果我一个北京人要跟广东、四川和天津人说话,我必须要会说这三种方言,这对于我的语言能力来说很痛苦,要学会这三种话。但是我们知道湖南卫视汪涵很牛逼,会说各种方言,我把他请来当翻译,汪涵就是JVM,他能说这三种方言,并且他只听懂得普通话,但是会说各种方言,这好像有点奇怪,所有想要跟广东、四川和天津打交道的人都跟汪涵说普通话,让他来帮忙翻译,我们说一句他翻译语句,这样的最终目的我们只需要学会普通话就可以跟任何人交流了。这就是Java平台。正是因为多了中间翻译人这么一个过程,所以很明显我说普通话跟广东人交流显得很慢,需要等汪涵来翻译,肯定是没有我直接说广东话来的直接。这也就是为什么Java比C/C++慢的原因,虚拟机需要解释执行。虽然速度慢,但是换来的是我们只需要说普通话就能跟所有人交流,这样的代价是值得的,而且虚拟机性能和各种Java技术的发展,这个解释执行的过程越来越快,以后说不定就追上C/C++了,也就是汪涵的语速会变得和好声音华少的语速,甚至再快,到了周杰伦唱歌速度那么快,我们和不同地区的人交流就更快了。当然现在的JVM不仅仅是逐行解释执行,还有部分JIT技术和其他很多各方面的提升。

Java、JVM和操作系统之间的关系,写给新人,,布布扣,bubuko.com

时间: 2024-12-10 18:35:02

Java、JVM和操作系统之间的关系,写给新人,的相关文章

windows 程序的本体与操作系统之间的关系

1 WinMain(hInst,hPrev,--) 2 { 3 MSG msg; 4 RegisterClass(--); 5 CreateWindow(--); 6 ShowWindow(--); 7 UpdateWindow(--); 8 while(GetMessage(--)) 9 { 10 TranslateMessage(--); 11 DispatchMessage(--); 12 } 13 return msg.wParam; 14 } 15 16 Window Procedur

java 类与类之间的关系 及uml图

类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(association) 聚合关系(aggregation) 合成关系 (compostion) 依赖关系 (dependency) 1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系.一般化的关系是从子类指向父类的,与继承或实现的方法相反.

java抽象类和抽象方法之间的关系

抽象类和抽象方法之间的关系有抽象方法的类,一定是抽象类:抽象类不一定有抽象方法当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类因为子类是继承父类全部内容,所以也就相当于子类中也有了抽象方法,通过重写,可以将抽象方法覆盖. 抽象类的特点:必须有abstract关键字修饰,不可以通过new来创建对象,抽象方法不可以写函数体(非抽象方法必须写函数体) 关键字小总结:不想让别的类重写的方法,用final:内容不确定的方法,用abstract(子类中用法不一样)

java程序、JVM、操作系统之间的

11.Java类与类之间的关系

类与类之间最常见的关系主要有三种:依赖(uses-a).聚合(has-a)和继承(is-a). 下面以在线书店订单系统为例,来详细的讲述这三种关系的概念. 在线书店订单系统的主要功能是:注册用户可以登录到网上书店选购图书,在线填写订单,并支付购书款.书店确认已经收到购书款时,按用户留下的地址邮寄图 书.可以在这个系统中建立几个类,有图书(book).账户(account).订单(order).地址(address)等,如下图所示: 依赖(uses-a) 依赖关系是类中最常见的关系,例如订单类(o

JVM 与 Linux 的内存关系详解

在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m. 从表面上,物理内存应该是足够使用的:但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用 了),如下图所示.由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了? 要分析这个问题,理解JVM和操作系统之间的内存关系非常重要.接下来主要就Linux与JVM之间的内存关系进行一些分析

oracle sid,instance_name,db_name,oracle_sid之间的关系

[一]对ORACLE_SID的理解 --------------------------------------------------------------------------------Oracle中SID的作用类似于一个"开关变量"---引导Oracle在实例启动时如何去默认位置下读取适当的参数文件并加载,以正确启动实例. 我们知道实例的启动需要指定pfile/spfile(Oracle9i之前是使用pfile--即init文件,从9i开始就默认使用spfile--即服务器

java--------【对象之间的关系】

Java中的对象之间的关系有多种,在此之前我着实对这些只是有一点模糊的概念,知道有一次在面试中被面试官问道,才有了这些概念.那就今天借这个机会同大家分享下这个知识点,同时我也在去学习一遍. 1.依赖关系: 这种关系是几种关系中最弱的一种,是对象之间的一种临时关系.例如在一个方法中的返回值供其他对象的调用,这样就与其他的对象建立了一种临时的关系,等调用该方法结束后,他们之间产生的关系也就结束了. 2.关联关系: 所谓的关联关系,对象彼此之间的一种联系.例如淘宝中,用户类与订单类之间的关系,他们彼此

JDK、JRE、JVM之间的关系

   JDK.JRE.JVM之间的关系 1.JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.JDK.JRE.JVM之间有什么关系? JDK.JRE.JVM之间是一种包含关系,范围是从大到小依次为 JDK>JRE>JVM,即JDK中包含JRE,JRE包含JVM. 3.两个JRE,都有什么作用? 第一个JRE安装路径:C:\Program Files\Java