临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

jre是什么(java现在有哪个公司开发的)

5月5日 金钟寨投稿
  写在前面
  简单的介绍一下JVM(JavaVirtualMachine)吧,它也叫Java虚拟机。虽然它叫虚拟机,但是实际上不是我们所理解的虚拟机,它更像操作系统中的一个进程。JVM屏蔽了各个操作系统底层的相关的东西,Java程序只需要生成对应的字节码文件,然后由JVM来负责解释运行。
  介绍几个容易混淆的概念,JDK(JavaDevelopmentKit)可以算是整个Java的核心,其中有编译、调试的工具包和基础类库,它也包含了JRE。
  JRE(JavaRuntimeEnvironment),包含了JVM和基础类库。而JVM就是我们今天要聊的主角,开篇聊到,JVM负责解释运行,它会将自己的指令映射到当前不同设备的CPU指令集上,所以只需要在不同的操作系统上装不同版本的虚拟机即可。这也给了Java跨平台的能力。JVM的发展
  就跟我们用三方库一样,同样的功能有不同的实现。JVM也是一样的,第一款JVM是Sun公司的ClassicVM,JDK1。2之前JVM都是采用的ClassicVM,而之后,逐渐被我们都知道的HotSpot给替代,直到JDK1。4,ClassicVM才完全被弃用。
  HotSpot应该是目前使用最广泛的虚拟机(自信点,把应该去掉),也是OpenJDK中所带的虚拟机。但是你可能不知道,HotSpot最开始并不是由Sun公司开发,而是由一家小公司设计并实现的,而且最初也不是为Java语言设计的。Sun公司看到了这个虚拟机在JIT上的优势,于是就收购了这家公司,从而获得了HotSpotVM。运行时内存区域
  可能你经历过被灵魂拷问是什么滋味,如果线上发生了OOM(OutOfMemory),该怎么排查?如果要你来对一个JVM的运行参数进行调优,你该怎么做?
  不像C可以自己来主宰内存,同时扮演上帝和最底层劳工的角色,Java里我们把内存管理交给了JVM,如果我们不能了解其中具体的运行时内存分布以及垃圾回收的原理,那等到问题真正出现了,很可能就无从查起。这也是要深入的了解JVM的必要性。
  Java在运行时会将内存分成如下几个区域进行管理,堆、方法区、虚拟机栈、本地方法栈和程序计数器。堆
  堆(JavaHeap)是JVM所管理的内存中最大的一块了。我们平常开发中使用new关键字来进行实例化的对象几乎都会在堆中分配内存,所有线程都可以共享被分配在堆上的对象。
  堆也是JVM垃圾回收的主要区域,正因为垃圾回收的分代机制,其实堆中还可以分为更细的新生代、老年代。GC这块后面会细讲。
  那为什么是几乎呢?在JVM本身的规范中是规定了所有的对象都会在堆上分配内存的,但是随着JIT(JustInTime)编译器和逃逸分析技术的成熟,所有对象都在堆上分配内存就变得没有那么绝对了。JIT编译器
  不知道你有没有听说过,二八定律在我们的程序中也同样适用,那就是20的代码占用了系统运行中80的资源。在我们写的代码中,就可能会存在一些热点代码,频繁的被调用。除了被频繁的调用的代码,还有被执行多次的循环体也算热点代码。
  那此时JIT编译器就会对这部分的代码进行优化,将它们编译成MachineCode,并做一些对应的优化。不熟悉的同学可能会说,我们的代码不都已经被编译成了字节码了吗?怎么又被编译成了MachineCode?
  因为字节码只是一个中间状态,真正的运行是JVM在运行的时候,就跟解释型语言一样将字节码逐条的翻译成了MachineCode,这个MachineCode才是操作系统能够识别直接运行的指令。而JIT就会把编译好的热点代码所对应的MachineCode保存下来,下载再调用时就省去了从字节码编译到MachineCode的过程,效率自然也就提高了。逃逸分析
  我们刚刚提到过,Java中几乎所有的对象都在堆上分配空间,堆中的内存空间是所有线程共享的,所以在多线程下才需要去考虑同步的相关问题。那如果这个变量是个局部变量,只会在某个函数中被访问到呢?
  这种局部变量就是未逃逸的变量,而这个变量如果在其他的地方也能被访问到呢?这说明这个变量逃逸出了当前的作用域。通过逃逸分析我们可以知道哪些变量没有逃逸出当前作用域,那这个对象内存就可以在栈中分配,随着调用的结束,随着线程的继续执行完成,栈空间被回收,这个局部变量分配的内存也会一起被回收。方法区
  方法区存放了被加载的Class信息、常量、静态变量和JIT编译之后的结果等数据,与堆一样,方法区也是被所有线程共享的内存区域。但与堆不同,相对于堆的GC力度,这块的垃圾回收力度可以说是小了非常多,但是仍然有针对常量的GC。虚拟机栈
  虚拟机栈是线程私有的,所以在多线程下不需要做同步的操作,是线程安全的。当每个方法执行时,就会在当前线程中虚拟机栈中创建一个栈帧,每个方法从调用到结束的过程,就对应了栈帧在虚拟机栈中的入栈、出栈的过程。那自然而然,栈帧中应该存放的就是方法的局部变量、操作数栈、动态链接和对应的返回信息。
  不知道你遇到过在方法内写递归时,由于退出条件一直没有达到,导致程序陷入了无限循环,然后就会看到程序抛出了一个StackOverflow的错误。其所对应的栈就是上面提到的操作数栈。
  当然这是在内存足够的情况下,如果内存不够,则会直接抛出OutOfMemory,也就是常说的OOM。本地方法栈
  本地方法栈的功能与虚拟机栈类似,区别在于虚拟机栈是服务于JVM中的Java方法,而本地方法栈则服务于Native的方法。GC
  其实堆中的区域还可以划分为新生代和老年代,再分割的细一点,可以到Eden、FromSurvivor、ToSurvivor。首先分配的对象实例会到Eden区,在新生代这块区域一般是最大的,与FromSurvivor的比例是8:1,当然这个比例可以通过JVM参数来改变。而且当分配的对象实体很大的时候将会直接进入到老年代。
  为什么要对堆进行更加细致的内存区域划分,其实是为了让垃圾回收更加的高效。垃圾识别机制
  那JVM是如何判断哪些对象是垃圾需要被回收呢?我们就需要来了解一下JVM是如何来判断哪些内存需要进行回收的。引用计数
  实现的思路是,给每个对象添加一个引用计数器,每当有其他的对象引用了这个对象,就把引用计数器的值1,如果一个对象的引用计数为0则说明没有对象引用它。
  乍一看是没有问题的,那为什么Java并没有采取这种呢?
  想象一下这个场景,一个函数中定义了两个对象O1和O2,然后O1引用了O2,O1又引用了O1,这样一来,两个对象的引用计数器都不为0,但是实际上这两个对象再也不会被访问到了。
  所以我们需要另外一种方案来解决这个问题。可达性分析
  可达性分析可以理解为一棵树的遍历,根节点是一个对象,而其子节点是引用了当前对象的对象。从根节点开始做遍历,如果发现从所有根节点出发的遍历都已经完成了,但是仍然有对象没有被访问到,那么说明这些对象是不可用的,需要将内存回收掉。
  这些根节点有个名字叫做GCRoots,哪些资源可以被当作GCRoots呢?栈帧中的局部变量所引用的对象方法区中类静态属性所引用的对象方法区中常量所引用的对象本地方法栈所引用的对象
  我们刚刚聊过,在引用计数中,如果其引用计数器的值为0,则占用的内存会被回收掉。而在可达性分析中,如果没有某个对象没有任何引用,它也不一定会被回收掉。垃圾回收算法
  聊完了JVM如何判断一个对象是否需要回收,接下来我们再聊一下JVM是如何进行回收的。标记清除
  顾名思义,其过程分为两个阶段,分别是标记和清除。首先标记出所有需要回收的对象,然后统一对标记的对象进行回收。这个算法的十分的局限,首先标记和清除的两个过程效率都不高,而且这样的清理方式会产生大量的内存碎片,什么意思呢?
  就是虽然总体看起来还有足够的剩余内存空间,但是他们都是以一块很小的内存分散在各个地方。如果此时需要为一个大对象申请空间,即使总体上的内存空间足够,但是JVM无法找到一块这么大的连续内存空间,就会导致触发一次GC。
  复制
  其大致的思路是,将现有的内存空间分为两半A和B,所有的新对象的内存都在A中分配,然后当A用完了之后,就开始对象存活判断,将A中还存活的对象复制到B去,然后一次性将A中的内存空间回收掉。
  这样一来就不会出现使用标记清除所造成的内存碎片的问题了。但是,它仍然有自己的不足。那就是以内存空间缩小了一半为代价,而在某些情况下,这种代价其实是很高的。
  堆中新生代就是采用的复制算法。刚刚提到过,新生代被分为了Eden、FromSurvivor、ToSurvivor,由于几乎所有的新对象都会在这里分配内存,所以Eden区比Survivor区要大很多。因此Eden区和Survivor区就不需要按照复制算法默认的1:1的来分配内存。
  在HotSpot中Eden和Survivor的比例默认是8:1,也就意味着只有10的空间会被浪费掉。
  看到这你可能会发现一个问题。
  既然你的Eden区要比Survivor区大这么多,要是一次GC之后的存活对象的大小大于Survivor区的总大小该怎么处理?
  的确,在新生代GC时,最坏的情况就是Eden区的所有对象都是存活的,那这个JVM会怎么处理呢?这里需要引入一个概念叫做内存分配担保。
  当发生了上面这种情况,新生代需要老年代的内存空间来做担保,把Survivor存放不下的对象直接存进老年代中。标记整理
  标记整理其GC的过程与标记清楚是一样的,只不过会让所有的存活对象往同一边移动,这样一来就不会像标记整理那样留下大量的内存碎片。
  分代收集
  这也是当前主流虚拟机所采用的算法,其实就是针对不同的内存区域的特性,使用上面提到过的不同的算法。
  例如新生代的特性是大部分的对象都是需要被回收掉的,只有少量对象会存活下来。所以新生代一般都是采用复制算法。
  而老年代属于对象存活率都很高的内存空间,则采用标记清除和标记整理算法来进行垃圾回收。垃圾收集器新生代收集器
  聊完了垃圾回收的算法,我们需要再了解一下GC具体是通过什么落地的,也就是上面的算法的实际应用。Serial
  Serial采用的是复制算法的垃圾收集器,而且是单线程运作的。也就是说,当Serial进行垃圾收集时,必须要暂停其他所有线程的工作,直到垃圾收集完成,这个动作叫STW(StopTheWorld)。Golang中的GC也会存在STW,在其标记阶段的准备过程中会暂停掉所有正在运行的Goroutine。
  而且这个暂停动作对用户来说是不可见的,用户可能只会知道某个请求执行了很久,没有经验的话是很难跟GC挂上钩的。
  但是从某些方面来看,如果你的系统就只有单核,那么Serial就不会存在线程之间的交互的开销,可以提高GC的效率。这也是为什么Serial仍然是Client模式下的默认新生代收集器。
  ParNew
  ParNew与Serial只有一个区别,那就是ParNew是多线程的,而Serial是单线程的。除此之外,其使用的垃圾收集算法和收集行为完全一样。
  该收集器如果在单核的环境下,其性能可能会比Serial更差一些,因为单核无法发挥多线程的优势。在多核环境下,其默认的线程与CPU数量相同。
  ParallelScavenge
  ParallelScavenge是一个多线程的收集器,也是在server模式下的默认垃圾收集器。上面的两种收集器的重点是如何减少STW的时间,而ParallelScavenge则更加于系统的吞吐量。
  例如JVM已经运行了100分钟,而GC了1分钟,那么此时系统的吞吐量为(1001)10099。
  吞吐量和短停顿时间其侧重的点不一样,需要根据自己的实际情况来判断。高吞吐量
  GC的总时间越短,系统的吞吐量则越高。换句话说,高吞吐量则意味着,STW的时间可能会比正常的时间多一点,也就更加适合那种不存在太多交互的后台的系统,因为对实时性的要求不是很高,就可以高效率的完成任务。短停顿时间
  STW的时间短,则说明对系统的响应速度要求很高,因为要跟用户频繁的交互。因为低响应时间会带来较高的用户体验。老年代收集器SerialOld
  SerialOld是Serial的老年代版本,使用的标记整理算法,其实从这看出来,新生代和老年代收集器的一个差别。新生代:大部分的资源都是需要被回收
  老年代:大部分的资源都不需要被回收
  所以,新生代收集器基本都是用的复制算法,老年代收集器基本都是用的标记整理算法。
  SerialOld也是给Client模式下JVM使用的。ParallelOld
  ParallelOld是ParallelScavenge的老年代版本,也是一个多线程的、采用标记整理算法的收集器,刚刚讨论过了系统吞吐量,那么在对CPU的资源十分敏感的情况下,可以考虑ParallelScavenge和ParallelOld这个新生代老年代的垃圾收集器组合。
  CMS
  CMS全称(ConcurrentMarkSweep),使用的是标记清除的收集算法。重点于最低的STW时间的收集器,如果你的应用非常注重与响应时间,那么就可以考虑使用CMS。
  从图中可以看出其核心的步骤:首先会进行初始标记,标记从GCRoots出发能够关联到的所有对象,此时需要STW,但是不需要很多时间
  然后会进行并发标记,多线程对所有对象通过GCRootsTracing进行可达性分析,这个过程较为耗时完成之后会重新标记,由于在并发标记的过程中,程序还在正常运行,此时有些对象的状态可能已经发生了变化,所以需要STW,来进行重新标记,所用的时间大小关系为初始标记

手机丢了怎么查苹果手机定位(定位手机号位置)手机丢了怎么查苹果手机定位(定位手机号位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的……手机号有没有定位怎么查(怎么定位手机位置)手机号有没有定位怎么查(怎么定位手机位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,……今日惠安汽油价格,惠安女子舒婷点击惠安小屋网关注更多新闻、旅游、美食等。最高毛坯销售限价元。92号汽油,年2月。后天油价上涨,楼面价1869元惠安房建投资有限公司,舒婷又能在一些常常被人们漠视的常规现象中发……100毫米等于多少米(100毫米等于多少分米)三年级上册数学知识点总结归纳(含题)毫米厘米分米基础知识过关1、在生活中,量比较短的物品,可以用(毫米、厘米、分米)做单位;量比较长的物体,常用(米)做单位;……有哪些双人游戏(和女朋友一起玩的双人游戏)Haven,一款最适合情侣玩的双人游戏,它也被叫作恋爱模拟器(当然,一个人玩也行,比如我。。。)剧情:游戏中玩家扮演的是一对情侣凯和玉,因为老家实行基因配对而不能在一起,……查别人的微信聊天记录大神可以查吗(如何看对方的聊天记录)查别人的微信聊天记录大神可以查吗(如何看对方的聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾……没有密码怎么查老公的微信聊天记录6(怎样查老公的微信跟别人聊没有密码怎么查老公的微信聊天记录6(怎样查老公的微信跟别人聊天)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存……1岁宝宝睡多久(一岁三个月宝宝正常睡眠时间)我家宝贝一岁五个月啦。小名黄大宝(外号:黄肉肉、黄臭臭、悠悠)。新手妈妈只有一边学习一边养崽。今天是睡眠篇。准备:温度20~25;相对湿度在60~70;空气新鲜;安……用别人手机号怎么查别人的定位(免费查找对方手机位置)用别人手机号怎么查别人的定位(免费查找对方手机位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是……自己怎么画眼线(初学化妆用什么眉笔好)想找到一支适合自己的眉笔,只需要三个步骤。第一步,选颜色,找到跟自己发色相近,但颜色稍浅的眉笔;第二步,选类型,铅笔式眉笔适合大部分人、自动旋转式眉笔适合新手、液体……华为手机丢了以后可以查定位吗(华为手机能不能定位别人位置)华为手机丢了以后可以查定位吗(华为手机能不能定位别人位置)跟着移动互联网的开展,手机现已成为咱们作业日子不行分割的一部分。假如手机不幸丢掉,所有人都会很着急,都期望赶快找……住过的酒店可以凭身份证查记录吗(如何查个人住宾馆信息)住过的酒店可以凭身份证查记录吗(如何查个人住宾馆信息)实践日子中酒店的入住记载怎样查?假定说你有入住宾馆记载,那么就可以直接进入处理网络去查询自己的一个个人信息,……
米线怎么做好吃又简单(细米线的家常做法)一个人的午餐,说简单也简单,可以吃剩饭剩菜,也可以吃泡面。但是,如果说麻烦也很麻烦,没有泡面和剩饭剩菜的情况下怎么办?一个人在家做米饭或者做炒菜,包饺子等等,我都认为不仅浪费时……如何设置对方手机定位跟踪(怎样可以跟踪对方的位置)如何设置对方手机定位跟踪(怎样可以跟踪对方的位置)在日常生活中,由于手机的功能越来越强大,所以大部分人手上都会有智能手机。那么你用了这么久的手机,你知道手机上面隐藏的定位……教大家SD高达G世纪火线纵横机体捕捉获取攻略关于到现在SD高达G世纪火线纵横机体捕捉获取攻略这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道SD高达G世纪火线纵横……微信已删聊天记录账单能查前几年的吗(如何恢复删除的微信聊天记微信已删聊天记录账单能查前几年的吗(如何恢复删除的微信聊天记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存……查老公微信对吗(追踪老公微信聊天记录)查老公微信对吗(追踪老公微信聊天记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存文件来腾出手机空间。……vivo手机被偷了查定位可以找到吗(vivo怎么定位手机位置vivo手机被偷了查定位可以找到吗(vivo怎么定位手机位置)跟着移动互联网的翻开,手机现已成为我们作业日子不可切开的一部分。假定手机不幸丢掉,所有人都会很着急,都希望从……华为手机定位记录怎么查(华为手机怎样定位对方位置)华为手机定位记录怎么查(华为手机怎样定位对方位置)现在的社会,手机现已成为了万众随身的一种设备,它能够上网和联络朋友,能够作为人们的掌上电脑。现在的手机大多数都是智……哪里能查手机定位(如何免费查手机定位)哪里能查手机定位(如何免费查手机定位)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,可以……怎么查老婆微信聊天(如何查老婆的微信聊天记录)怎么查老婆微信聊天(如何查老婆的微信聊天记录)很多男人都没有真正了解过一个女人,了解她需要什么。然而对于一个女人来讲,也没有去了解男人需要的是什么。当然也有人好奇怎么偷偷……脂肪粒怎么去除小窍门(下眼袋有脂肪粒怎么办怎么去除)最近经常有小仙女在后台给小编留言,称饱受脂肪粒的困扰,虽然不痛不痒,但是长在脸上会影响美观,而且脂肪颗粒又不容易消除,到底该怎么办?很多人都认为脂肪粒牢不可摧,一旦形成就……苹果手机查定位能偷偷(怎么查找别人的iphone位置)苹果手机查定位能偷偷(怎么查找别人的iphone位置)现在的社会,手机现已成为了万众随身的一种设备,它能够上网和联络朋友,能够作为人们的掌上电脑。现在的手机大多数都……怎么恢复微信以前的聊天记录(如何找到以前的微信聊天记录)怎么恢复微信以前的聊天记录(如何找到以前的微信聊天记录)不少使用iPhone的朋友在发现自己误删手机中的重要数据后,都会想尽办法搜索各种挽救良药。如果你的数据足够重要,那……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找