首页编程java编程java虚拟机什么时间启动的,虚拟机是怎样运行的,原理是什么

java虚拟机什么时间启动的,虚拟机是怎样运行的,原理是什么

编程之家2023-10-13113次浏览

大家好,今天小编来为大家解答以下的问题,关于java虚拟机什么时间启动的,虚拟机是怎样运行的,原理是什么这个很多人还不知道,现在让我们一起来看看吧!

java虚拟机什么时间启动的,虚拟机是怎样运行的,原理是什么

虚拟机是怎样运行的,原理是什么

虚拟机的运行:

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

原理:

java虚拟机什么时间启动的,虚拟机是怎样运行的,原理是什么

从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件。

然后JRE加载Java字节码文件,载入系统分配给JVM的内存区,然后执行引擎解释或编译类文件,再由即时编译器将字节码转化为机器码。

扩展资料:

java虚拟机什么时间启动的,虚拟机是怎样运行的,原理是什么

虚拟机资源涉及多个方面:CPU、内存、网络以及磁盘。在规划虚拟机时应该考虑这些资源之间的关系,否则,分配的资源不合理将导致虚拟机内的应用程序性能表现不佳。

CPU:

虚拟机每个vCPU只运行在一个物理核心之上,因此CPU频率越高虚拟机的运行速度也就越高,vCPU数量越多有助于提升应用的性能表现。

一个比较复杂的因素就是在ESXi服务器内,所有的虚拟机共享使用物理CPU。ESXi服务器的核心数越多,每个vCPU获得的核心份额也就越大,因此多核心的性能表现要强于核心频率高但数量少的情况。

如果虚拟机需要占用大量的CPU时间,那么可以考虑为虚拟机分配第二个vCPU,但是,为虚拟机分配两个以上vCPU并不一定让应用运行的更快,因为只有多线程应用才能有效地使用多个vCPU。

RAM:

ESXi服务器内RAM资源通常有限,因此在给虚拟机分配RAM时需要格外小心。VMkernel在处理RAM时非常巧妙;允许虚拟机使用ESXi服务器所有的物理内存而且会尽量避免占用物理内存却没有真正使用的情况。

物理内存被完全用完后,VMkernel必须确定哪些虚拟机能够保留物理内存,哪些虚拟机要释放物理内存。这称之为“内存回收”。当虚拟机占用的物理内存被回收后,存在的一个风险就是会对虚拟机的性能造成影响。虚拟机被回收的内存越多,相应的风险也就越大。

最明智的是只为虚拟机分配完成工作所需要的内存。分配额外的内存将会增加回收风险。另一方面,当虚拟机操作系统将未被使用的内存用作磁盘缓存时,将会显著降低对磁盘系统的性能要求,所以这里有一个折衷问题。

对于数据库服务器以及VDI桌面来说,为虚拟机分配更多的内存往往更划算—在一台ESXi服务器上运行更少的虚拟机—而不是购买高性能的磁盘阵列。关键在于针对虚拟机的负载分配足够多内存而且没有浪费。

参考资料:

百度百科-虚拟机

java是谁发明的

十大事件与Java相关的四十个名字

1990-1994:Java缘起

文/孟岩

Larry Wall说,优秀程序员应有的三个特点:懒惰、急躁和傲慢。Java就是诞生在一群懒

惰、急躁而傲慢的程序天才之中。

1990年12月,Sun的工程师Patrick Naughton被当时糟糕的Sun C++工具折磨的快疯了。

他大声抱怨,并威胁要离开Sun转投当时在Steve Jobs领导之下的NeXT公司。领导层为了

留住他,给他一个机会,启动了一个叫做Stealth(秘密行动)的项目。随着James

Gosling等人的加入,这个项目更名为Green。其目标是使用C++为嵌入式设备开发一种新

的基础平台技术,James Gosling本人负责开发一个SGML编辑器。正如人们事后分析的那

样,这位天才的程序员太懒惰,所以没有把C++学好,开发中碰了一头包;太急躁??所以

不愿意停下来读读Scott Meyers的新书《Effective C++》;太傲慢??所以轻易地决定开

发一中新的编程语言。他把这种语言命名为C++++--,意思是C++“加上一些好东西,减

去一些坏东西”。显然这个糟糕的名字不可能长命百岁,很快这种颇受同伴喜爱的小语

言被命名为Oak。

到了1992年9月,Oak语言连同Green OS和一些应用程序一起发布在称做Start 7的小设备

上,从而使之有了第一次精彩的亮相。随后,Sun开了一家名为FirstPerson的公司,整

个团队被转移到这家公司里研发机顶盒,以投标时代华纳公司的一个项目。这帮天才被

技术狂热所鼓舞,开发出了一个高交互性的设备,结果没想到时代华纳公司和有线电视

服务商并不愿意用户拥有那么大的控制权,从而在竞标之战中败给了SGI。Oak的锋芒之

锐,竟然把客户都给吓懵了。Sun沮丧地关闭了FirstPerson,召回了整个团队。事实证

明,传统行业中那些脑满肥肠的保守主义者是腐朽没落的。回去!回到激情澎湃的IT产

业,抓住互联网的大潮,这才是出路!1994年,Oak被命名为Java,针对互联网的新一轮

开发如火如荼,一切已经就绪,熔岩在地下奔流,火山即将喷发。

1995: Java香浓世界

文/马伟

1995年,Sun正式对外公布了Java,并且发布了JDK 1.0。这种外形酷似C++,却包含一颗

Smalltalk般纯洁的面向对象之心的全新程序设计语言及其平台,几乎在一夜之间就成为

软件产业的新宠儿。Java当时仅仅被用来为网站制作一些动态应用,诸如动画图片之类,

但这仍然引起了很多Web开发者们的注意,他们非常渴望有一种安全的语言,可以在静态

的HTML网页上制作动画图片。Sun最终把Java集成到NetScape浏览器。同时因为它具有

“只写一次,随处运行”的特性,而引起了很多开发者的注意,他们可以再也不用为了

使程序能够在不同型号的硬件上运行而耗费大量的时间来编译代码了。

当时的Web浏览器的出现也为Java的出现起到了很好的推动作用,通过Java和Web浏览器

的结合,人们似乎看到了什么,有人甚至预言PC将在一两年内退出历史的舞台,取而代

之的是基于Java的浏览器应用程序,通过网络计算设备来进行应用。Java的出现为当时

的软件产业带来了无限的遐想。

1996:Java大跃进,盟主地位就此定

文/马伟

SUN在1996年一开始首先成立了JavaSoft组织,并在1月23日正式发布自己的Java 1.0,

作为20世纪业界出现的最重要的技术之一,Java引起了编程世界的革命。直到现在,

Java仍然是互联网上最流行的语言。

在Sun正式发布Java 1.0之后,Java这门新生的语言就拥有了自己的会议??JavaOne,这

次会议初试啼音就吸引了600多名参与者。除了拥有这么多的积极参与者来进行Java的开

发之外,各大知名公司也纷纷向Sun申请Java的许可。一时间,NetScape、惠普、IBM、

Oralce、Sybase甚至当时刚推出Windows 95的微软都是Java的追随者。

Java的应用就像是世界上的顶级玩家们组成的一个公开联盟,告诉全世界我们大家就是

都在用着Java。也正是因为如此,Java也找到了自己的归宿。现在的J2EE已经成为中大

型企业级应用的标准,成为承接数据库和Web之间的一个重要桥梁。

当年Java的机会实在太多了,以至于很难知道到底该做什么。最终Java在应用服务器市

场获得了难以取代的地位,也确定了J2EE的发展方向,并且仍将延续下去。

1997-2001:微软与Sun的Java官司

文/孟岩

Java诞生的1995年,正是微软在软件产业地位达到巅峰的时代,Windows 95发布时的风

光场面给人们留下的深刻印象至今难忘。尽管如此,作为最卓越的技术领袖,比尔?盖茨

仍然敏锐地注意到Java。当他了解了Java的一些细节之后,给予了这样的评价:“Java是

很长时间以来最优秀的程序设计语言。”基于此,微软于1996年3月申请并获得了Java许

可证。微软对于Java的这一热情态度在当时大大提高了人们对Java的兴趣和信心,但也

有不少人担心微软会依靠自己强大的影响力在标准之外另立标准,从而破坏Java的纯洁

性。

果然,从1997年发布Visual J++的第一个版本开始,微软就开始在Java中掺入自己的私

有扩展。这毫无疑问引起Sun的高度重视。1997年10月,Sun向美国加州地方法院起诉微

软公司违反两公司就微软使用Java技术所签定的合同,指控微软公司在自己的Java产品

中做了“不恰当的修改”,违反了合同中承诺向用户提供Java兼容产品的条款。这一官

司旷日持久,直到2001年1月双方达成和解,微软将继续提供采用Sun开发的Java技术的

现有产品(包括测试版)。不过,Sun有限制地仅对包括Java 1.1.4的微软产品提供许

可。到了2001年7月,微软公布新版的Windows XP将不再支持Sun的JVM,并且推出了.NET

平台与Java分庭抗礼。

现在回过头去看,当时的这一场官司对Java世界产生了深远的影响。如果没有这一场官

司,也许很多Java程序员都在使用Visual J++,基于WFC开发Windows客户端程序,同时

不得不面对被两个不同的事实标准所分裂的Java世界。

java 是什么语言写的

java是什么语言写的

JAVA中就虚拟机是其它语言开发的,用的是C语言+汇编语言基于此之上就是JAVA本身了虚拟机只起到解析作用

另外,JAVA并不比C语言慢,说JAVA慢一般是九十年代那时候的JAVA,而现在在一段优秀的JAVA程序和C程序执行效率上来比较是没有多大差距的并且现在JAVA已经可以像C语言那样,直接编译为可执行文件(不用虚拟机,跨平台为代价)了

不知道你看过卓越编程之道二(运用底层思维编写高级代码)没有,那里面详细的讲述了高级语言从编写到编译执行的过程,通过目标文件的反汇编对比,发现C,C++,JAVA,dephi等语言在同等质量下的目标文件长度上基本上没多大区别,一门语言的运行速度快慢,与你编写代码过程中是否符合编译器规则息息相关。有空你可以去看看这本书。

glusterfs是什么语言写的

glusterfs是什么语言写的

使用opencv需要编译源码,得到库文件。可以用cmake构建项目后编译,也可以直接用官方提供的编译好的版本。

官方提供的编译库一般只是标准版本,没有附加某些库,比如tbb等,要想让opencv使用tbb等库,就只能自己构建项目后编译。

当然,一般使用的话,用官方提供的库即可。OpenCV2.3.1版本就提供编译好的库,可以直接设置使用。

bigtable是什么语言写的

不过有人大费周折为他建立了一个类似于“关于 Chuck Norris的事实”这样的网站,这倒是件不同寻常的事。这是因为 Jeff Dean是一位软件工程师

zookeeper是什么语言写的

本文是Jason Wilder对于常见的服务发现项目 Zookeeper, Doozer, Etcd所写的一篇博客,其原文地址如下: Open-Source Service Discovery。

服务发现是大多数分布式系统以及面向服务架构(SOA)的一个核心组成部分。这个难题,简单来说,可以认为是:当一项服务存在于多个主机节点上时,client端如何决策获取相应正确的IP和port。

在传统情况下,当出现服务存在于多个主机节点上时,都会使用静态配置的方法来实现服务信息的注册。但是当大型系统中,需要部署更多服务的时候,事情就显得复杂得多。在一个实时的系统中,由于自动或者人工的服务扩展,或者服务的新添加部署,还有主机的宕机或者被替换,服务的location信息可能会很频繁的变化。

在这样的场景下,为了避免不必要的服务中断,动态的服务注册和发现就显得尤为重要。

关于服务发现的话题,已经很多次被人所提及,而且也的确不断的在发展。现在,笔者介绍一下该领域内一些open-source或者被经常被世人广泛讨论的解决方案,尝试理解它们到底是如何工作的。特别的是,我们会较为专注于每一个解决方案的一致性算法,到底是强一致性,还是弱一致性;运行时依赖;client的集成选择;以后最后这些特性的折中情况。

本文首先从几个强一致性的项目于开始,比如Zookeeper,Doozer,Etcd,这些项目主要用于服务间的协调,同时又可用于服务的注册。

随后,本文将讨论一些在服务注册以及发现方面比较有意思的项目,比如:Airbnb的SmartStack,Netflix的Eureka,Bitly的NSQ,Serf,Spotify and DNS,最后是SkyDNS。

问题陈述

在定位服务的时候,其实会有两个方面的问题:服务注册(Service Registration)和服务发现(Service Discovery)。

服务注册——一个服务将其位置信息在中心注册节点注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,有时也会有服务访问的认证信息,使用协议,版本号,以及关于环境的一些细节信息。

服务发现—— client端的应用实例查询中心注册节点以获知服务位置的过程。

每一个服务的服务注册以及服务发现,都需要考虑一些关于开发以及运营方面的问题:

监控——当一个已注册完毕的服务失效的时候,如何处理。一些情况下,在一个设定的超时定时(timeout)后,该服务立即被一个其他的进程在中心注册节点处注销。这种情况下,服务通常需要执行一个心跳机制,来确保自身的存活状态;而客户端必然需要能够可靠处理失效的服务。

负载均衡——如果多个相同地位的服务都注册完毕,如何在这些服务之间均衡所有client的请求负载?如果有一个master节点的话,是否可以正确处理client访问的服务的位置。

集成方式——信息注册节点是否需要提供一些语言绑定的支持,比如说,只支持Java?集成的过程是否需要将注册过程以及发现过程的代码嵌入到你的应用程序中,或者使用一个类似于集成助手的进程?

运行时依赖——是否需要JVM,ruby或者其他在你的环境中并不兼容的运行时?

可用性考虑——如果系统失去一个节点的话,是否还能正常工作?系统是否可以实时更新或升级,而不造成任何系统的瘫痪?既然集群的信息注册节点是架构中的中心部分,那该模块是否会存在单点故障问题?

强一致性的Registries

首先介绍的三个服务注册系统都采用了强一致性协议,实际上为达到通用的效果,使用了一致性的数据存储。尽管我们把它们看作服务的注册系统,其实它们还可以用于协调服务来协助leader选举,以及在一个分布式clients的集合中做centralized locking。

Zookeeper

Zookeeper是一个集中式的服务,该服务可以维护服务配置信息,命名空间,提供分布式的同步,以及提供组化服务。Zookeeper是由Java语言实现,实现了强一致性(CP),并且是使用 Zab协议在ensemble集群之间协调服务信息的变化。

Zookeeper在ensemble集群中运行3个,5个或者7个成员。众多client端为了可以访问ensemble,需要使用绑定特定的语言。这种访问形式被显性的嵌入到了client的应用实例以及服务中。

服务注册的实现主要是通过命令空间(namespace)下的 ephemeral nodes。ephemeral nodes只有在client建立连接后才存在。当client所在节点启动之后,该client端会使用一个后台进程获取client的位置信息,并完成自身的注册。如果该client失效或者失去连接的时候,该ephemeral node就从树中消息。

服务发现是通过列举以及查看具体服务的命名空间来完成的。Client端收到目前所有注册服务的信息,无论一个服务是否不可用或者系统新添加了一个同类的服务。Client端同时也需要自行处理所有的负载均衡工作,以及服务的失效工作。

Zookeeper的API用起来可能并没有那么方便,因为语言的绑定之间可能会造成一些细小的差异。如果使用的是基于JVM的语言的话, Curator Service Discovery Extension可能会对你有帮助。

由于Zookeeper是一个CP强一致性的系统,因此当网络分区(Partition)出故障的时候,你的部分系统可能将出出现不能注册的情况,也可能出现不能找到已存在的注册信息,即使它们可能在Partition出现期间仍然正常工作。特殊的是,在任何一个non-quorum端,任何读写都会返回一个错误信息。

Doozer

Doozer是一个一致的分布式数据存储系统,Go语言实现,通过 Paxos算法来实现共识的强一致性系统。这个项目开展了数年之后,停滞了一段时间,而且现在也关闭了一些fork数,使得fork数降至160。.不幸的是,现在很难知道该项目的实际发展状态,以及它是否适合使用于生产环境。

Doozer在集群中运行3,5或者7个节点。和Zookeeper类似,Client端为了访问集群,需要在自身的应用或者服务中使用特殊的语言绑定。

Doozer的服务注册就没有Zookeeper这么直接,因为Doozer没有那些ephemeral node的概念。一个服务可以在一条路径下注册自己,如果该服务不可用的话,它也不会自动地被移除。

现有很多种方式来解决这样的问题。一个选择是给注册进程添加一个时间戳和心跳机制,随后在服务发现进程中处理那些超时的路径,也就是注册的服务信息,当然也可以通过另外一个清理进程来实现。

服务发现和Zookeeper很类似,Doozer可以罗列出指定路径下的所有入口,随后可以等待该路径下的任意改动。如果你在注册期间使用一个时间戳和心跳,你就可以在服务发现期间忽略或者删除任何过期的入口,也就是服务信息。

和Zookeeper一样,Doozer是一个CP强一致性系统,当发生网络分区故障时,会导致同样的后果。

Etcd

Etcd是一个高可用的K-V存储系统,主要应用于共享配置、服务发现等场景。Etcd可以说是被Zookeeper和Doozer催生而出。整个系统使用Go语言实现,使用Raft算法来实现选举一致,同时又具有一个基于HTTP+JSON的API。

Etcd,和Doozer和Zookeeper相似,通常在集群中运行3,5或者7个节点。client端可以使用一种特定的语言进行绑定,同时也可以通过使用HTTP客户端自行实现一种。

服务注册环节主要依赖于使用一个key TTL来确保key的可用性,该key TTL会和服务端的心跳捆绑在一起。如果一个服务在更新key的TTL时失败了,那么Etcd会对它进行超时处理。如果一个服务变为不可用状态,client会需要处理这样的连接失效,然后尝试另连接一个服务实例。

服务发现环节设计到罗列在一个目录下的所有key值,随后等待在该目录上的所有变动信息。由于API接口是基于HTTP的,所以client应用会的Etcd集群保持一个long-polling的连接。

由于Etcd使用 Raft一致性协议,故它应该是一个强一致性系统。Raft需要一个leader被选举,然后所有的client请求会被该leader所处理。然而,Etcd似乎也支持从non-leaders中进行读取信息,使用的方式是在读情况下提高可用性的未公开的一致性参数。在网络分区故障期间,写操作还是会被leader处理,而且同样会出现失效的情况。

delphi是什么语言写的

Object Pascal

jdk是什么语言写的

你猜~~

druid是什么语言写的

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

EPM和BI是什么啊?是用java语言写的吗?

不全是java,epm有用.写的,但是绝大多少是用java。

BI设计到大数据,除了java还有一些新技术,比如scala和kalfka。

dos是什么语言写的?

汇编语言,低级编辑语言

Api是什么语言写的?

API肯定也是一种语言实现他具体功能的啊.

相当于函数,不过我们只能调用,不知道如何实现的.

关于java虚拟机什么时间启动的到此分享完毕,希望能帮助到您。

java 句柄是什么,Java的句柄是什么意思java通知主要用于什么意思?java是做什么的啊