jre是什么(jre安装教程)
序
JVM是Java虚拟机(Java Virtual Machine)的缩写。JVM是计算设备的规范。它是一台虚拟的计算机,通过在实际计算机上模拟各种计算机功能来实现。Java虚拟机包括一个字节码指令集、一组寄存器、一个堆栈、一个垃圾收集堆和一个存储方法域。JVM屏蔽了与特定操作系统平台相关的信息,使得Java程序只需生成运行在Java虚拟机上的目标代码(字节码),就可以在各种平台上运行,无需修改。JVM在执行字节码的时候,实际上最终把字节码解释为特定平台上的机器指令执行。
JRE/JDK/JVM之间是什么关系?
JRE(JavaRuntimeEnvironment)是Java平台。所有的Java程序都必须在JRE下运行。普通用户只需要运行开发好的java程序,安装JRE即可。
**JDK(java开发工具包)**是程序开发人员用来编译和调试java程序的开发工具包。JDK的工具也是Java程序,也需要JRE来运行。为了保持JDK的独立性和完整性,JRE也是JDK安装过程的一部分。因此,在JDK的安装目录下有一个名为jre的目录,用于存储JRE文件。
**JVM(JavaVirtualMachine) * *是JRE的一部分。它是一台虚拟的计算机,是在一台实际的计算机上模拟各种计算机功能而实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等。,也有相应的指令系统。Java语言最重要的特点就是跨平台操作。JVM用于支持独立于操作系统的跨平台。
Java学习笔记分享地址:JVM调优与实战400多页的学习笔记
JVM原则
JVM是java的核心和基础,是介于java编译器和os平台之间的虚拟处理器。它是以软件方式实现的抽象计算机,基于底层操作系统和硬件平台,在其上可以执行java字节码程序。
添加描述
Java编译器只需要面对JVM就可以生成JVM能理解的代码或者字节码文件。Java源文件翻译成字节码程序,每条指令通过JVM翻译成不同平台的机器码,然后通过特定平台运行。
JVM的体系结构
添加描述
ClassLoader(用于加载。类文件)
执行引擎(执行字节码或执行本地方法)
运行时数据区(方法区、堆、java堆栈、PC寄存器、本地方法堆栈)
JVM运行时数据区
添加描述
第一:PC寄存器
PC寄存器用于存储每个线程接下来要执行的JVM指令。如果该方法是本地的,则PC寄存器中不会存储任何信息。
第二块:JVM栈
JVM栈是线程私有的,每个线程将同时创建JVM栈。JVM堆栈存储当前线程中局部基本类型的变量(java定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分返回结果和堆栈帧。非基本类型的对象只存储一个指向JVM堆栈的地址。
第三块:堆
它是JVM用来存储对象实例和数组值的区域。可以认为这里分配了Java中new创建的所有对象的内存,堆中对象的内存需要等待GC回收。
添加描述
(1)堆是JVM中所有线程共享的,所以堆上对象内存的分配需要加锁,这也导致了新对象的成本很高。
(2)为了提高对象内存分配的效率,Sun Hotspot JVM会为创建的线程在空之间分配一个独立的TLAB(线程本地分配缓冲区),其大小由JVM根据运行情况计算,在TLAB上分配对象时不需要锁。所以JVM在给线程的对象分配内存时,会尽量在TLAB上分配内存。在这种情况下,JVM中分配对象内存的性能基本和C一样高效,但如果对象过大,还是直接使用heap 空分配。
(3) TLAB只在新一代的Eden空间工作,所以在编写Java程序时,分配几个小对象通常比分配大对象更有效率。
(4)所有新创建的对象都将存储在新一代Yong代中。如果年轻一代的数据在一个或多个GC中幸存,它将被转移到老一代。新对象总是在伊甸园空间中被创建。
第四块:方法区。
(1)在孙,这一区域对应于永久世代,也称为持续世代。
(2)方法区存储加载的类信息(名称、修饰符等。)、类中的静态变量、类中定义为final类型的常数、类中的字段信息以及类中的方法信息。开发者在程序中通过类对象中的getName、isInterface等方法获取信息时,这些数据都来自方法区,方法区也是全局共享的。在一定条件下,也会GC。当方法区域所需的内存超过其允许的大小时,将抛出OutOfMemory错误消息。
第五块:运行时常量池。
是类中的固定常数信息、方法和字段的引用信息等。,它的空是从方法区域分配的。
第六块:本机方法堆栈。
JVM采用本地方法栈来支持原生方法的执行,这个区域用来存储每个原生方法调用的状态。
一种判断物体是否“死”的算法
因为程序计数器、Java虚拟机栈、本地方法栈都是线程独占的,它们占用的内存是和线程一起出生的,随着线程的结束而回收。Java堆和方法区是不同的。线程共享是GC的一部分。
堆里几乎都是对象。在GC之前,需要考虑哪些对象还活着,哪些对象已经死了,可以回收。
有两种算法来确定一个对象是否是活的:
1)引用计数算法:给对象添加一个引用计数器,每当在一个地方应用一个对象,计数器就加1;当引用无效时,计数器减1;当计数器为0时,表示对象已经死亡,可以回收。但是很难解决两个对象之间的循环引用。
2)可达性分析算法:从一系列称为“GC根”的对象开始,从这些节点向下搜索。搜索的路径叫做参考链。当一个对象和GC根之间没有引用链时(即对象对于GC根是不可达的),证明该对象是死的,是可回收的。Java中可以作为GC根的对象包括:虚拟机栈中引用的对象,本地方法栈中本机方法引用的对象,方法区静态属性引用的对象,方法区常数值引用的对象。
在主流商业编程语言(比如我们的Java)的主流实现中,可达性分析算法是用来判断一个对象是否有生命的。
JVM垃圾收集
GC(垃圾回收)的基本原理:回收内存中不再使用的对象。气相色谱中用于回收的方法称为收集器。由于GC需要消耗一些资源和时间,Java在分析对象的生命周期特征后,按照新世代和老世代对对象进行收集,尽可能缩短GC造成的应用暂停。
(1)新生代天体的集合称为小GC;;
(2)老代对象的集合称为全GC;;
(3)程序中主动调用System.gc()强制执行的gc是全GC。
GC会采用不同的方法回收不同的对象引用类型,JVM对象引用分为四种类型:
(1)强引用:默认情况下,所有对象都被强引用(这个对象实例没有其他对象引用,它将在GC中被回收)
(2)软引用(Soft reference):软引用是Java提供的一个应用,适用于缓存场景(只有在内存不足的情况下才会被GC使用)
(3)弱引用:肯定会被GC回收。
(4)虚引用:因为虚引用只是用来知道对象是不是GC。
垃圾收集算法1.标记清除算法
最基本的算法分为两个阶段:标记和清除:首先标记需要回收的对象,标记后统一回收所有标记的对象。
它有两个缺点:一是效率,标记和清除过程效率低;一个是空之间的问题。标记清除后会产生大量不连续的内存碎片(类似于我们电脑的磁盘碎片)。空之间碎片太多,以至于需要分配大对象的时候找不到足够的连续内存,只好提前触发另一个垃圾收集动作。
添加描述
复制算法
为了解决效率问题,出现了“复制”算法,将可用内存按照容量分成大小相等的两块,每次只需要使用其中的一块。当一个内存块用完后,把幸存的对象复制到另一个块,然后把新用的内存空清理一次。这样解决了内存碎片问题,但代价是可用内容减少到原来的一半。
添加描述
标记排序算法
当对象存活率较高时,算法会频繁复制,效率会降低。于是,就有了标记排序算法。标记过程与标记清除算法相同,但在后续步骤中,不是直接清理对象,而是将存活的对象全部移到一边,然后直接清理结束边界外的内存。
添加描述
世代收集算法
目前商用虚拟机的GC都采用分代收集算法,没有新意。而是根据对象生命周期的不同,将堆分为新世代和旧世代,方法区称为永久世代(新版本中已经抛弃了永久世代,引入了meta 空的概念,永久世代直接在meta 空之间使用JVM内存而不是物理内存)。
这样就可以根据每个时代的特点采用不同的采集算法。
添加描述
在新的一代,对象“早晚死”。每一次GC,都会有大量的对象死亡,少数存活下来。使用复制算法。新生代分为伊甸园区和幸存者区(幸存者from,幸存者to),默认大小比例为8:1:1。
由于老年期的对象存活率高,没有额外的空分配保证,所以使用标记-清除或标记-排序算法。
新生成的对象首先进入Eden区,然后在Eden区满时使用Survivor from,然后在Survivor from满时执行Minor GC(新一代GC),将Eden中的幸存对象和Survivor from复制到Survivor to中,然后清除空Eden和Survivor from。此时,原来的幸存者从成为新的幸存者到,原来的幸存者到成为新的幸存者从。复制时,如果Survivor to不能容纳洪都博客中所有存活的对象,则按照老年的分配担保(类似于银行的贷款担保)将对象复制到老年,如果老年不能容纳,则执行Full GC(老年GC)。
大对象直接进入老年:JVM中有一个参数配置。
-xx:preturesizetreshort,使大于该设定值的对象直接进入老年,以避免Eden和Survivor区域之间的大量内存重复。
长寿对象进入老年期:JVM为每个对象定义了一个对象年龄计数器。如果该对象在Eden出生并通过第一个次要GC后仍然活着,并且可以被幸存者容纳,则它将被移入年龄设置为1的幸存者中。没有小GC,年龄会加1。当他的年龄达到一定程度(默认为15岁,可以通过XX:MaxTenuringThreshold设置)时,他就会转入老年。但是,JVM并不总是要求年龄必须达到最大年龄才能被提升到最大年龄。如果Survivor 空中所有同龄对象(例如X的年龄)之和大于Survivor的一半,则所有年龄大于等于X的对象将直接进入老年,而无需等待最大年龄要求。
垃圾收集工
垃圾收集算法是方法论,垃圾收集器是具体实现。JVM规范没有任何关于如何实现垃圾收集器的规定,所以不同厂商和不同版本虚拟机提供的垃圾收集器差别很大。这里,我们只看热点虚拟机。
JDK7/8之后,HotSpot虚拟机的所有收集器和组合(连接)如下:
添加描述
串行收集器
串行采集器是最基础也是最古老的采集器,曾经是新一代手机的唯一选择。它是单线程的,只使用一个CPU或一个收集线程来完成垃圾收集。当它收集的时候,它必须挂起所有其他的工作线程,直到它结束,也就是“停止世界”。停止所有用户线程,这对于许多应用程序来说是不可接受的。比如你正在做一件事,被别人逼停了,你还能指望羊驼从你心里冲过吗?
尽管如此,它仍然是运行在客户端模式下的虚拟机默认的新一代收集器:简单高效(相比其他收集器的单线程,因为没有线程切换等开销。).
工作图:
添加描述
全新收集器
ParNew collector是串行收集器的多线程版本。除了多线程,其他行为(收集算法、停止世界、对象分配规则、回收策略等。)与串行收集器相同。
在许多运行在服务器模式下的JVM中,它是新一代收集器的首选。一个很重要很重要的原因是,除了Serial,只有他能和老CMS收藏者合作。
工作图:
添加描述
平行扫气收集器
新一代采集器,并行多线程采集器。其目标是达到一个可控的吞吐量(即CPU运行用户代码时间与总CPU消耗时间之比,即吞吐量=用户代码行时间/用户代码行时间垃圾收集时间),能够高效利用红豆博客之间的CPU时间,尽快完成程序计算任务,适用于后台没有太多交互的任务。
连环老收藏家
旧版串行收集器,单线程,“标签排序”算法,主要供客户端模式的虚拟机使用。
此外,在服务器模式下:
平行扫气收集器用于JDK 1.5之前的版本。
可作为CMS的后台方案,CMS中的并发模式故障使用。
工作图:
添加描述
平行旧收集器
老版本的并行清除,多线程,“标签排序”算法,JDK 1.6刚刚出现。在此之前,并行清除只能用于串行旧的。因为串行老的性能差,并行扫气的优势发挥不出来,很尴尬~ ~
并行旧收集器的出现,让“吞吐量优先”的收集器终于有了名副其实的组合。当吞吐量和CPU敏感时,可以使用并行清除/并行旧组合。该组合的工作原理图如下:
添加描述
CMS收集器
CMS(Concurrent Mark Sweep)收集器是一种以获得最短恢复暂停时间为目标的收集器。暂停时间短,用户体验好。
基于“标记清除”算法,将并发收集、低停顿和复杂的操作过程分为四个步骤:
_1)初始标记:_只标记GC根可以直接关联的对象,速度很快,但是需要“停止世界”
_2)并发标记:_是跟踪引用链的过程,可以和用户线程并发执行。
_3)重新标记:_在并发标记阶段,纠正由于用户线程继续运行而导致标记发生变化的那部分对象的标记记录,比初始标记时间长,但远短于并发标记时间,需要“停止世界”
_4)并发清除:_清除标记为可回收的对象可以与用户线程并发执行。
一般来说,CMS收集器的内存回收过程和用户线程是并发执行的,因为在整个过程中占用时间最长的并发标记和并发清除可以和用户线程一起工作。
工作图:
添加描述
CSM收集器有三个缺点:
1)对CPU资源非常敏感
并发收集不会挂起用户线程,但它仍然会降低应用程序的速度,减少总吞吐量,因为它会占用一部分CPU资源。
CMS的默认收集线程数=(CPU数3)/4;当CPU数量超过4个时,收集线程占用CPU资源超过25%,可能会对用户程序产生较大影响。如果数量少于4,影响会更大,可能无法接受。
2)浮动垃圾无法处理(并发清理时用户线程新产生的垃圾称为浮动垃圾),“并发模式失败”可能会失败。
要预留一定的内存空用于并发清除,在老年期其他收集器快满的时候是无法收集的。如果CMS 空的预留内存不能满足程序的需要,就会出现“并发模式失败”故障。此时JVM启用备份计划:临时启用Serail旧收集器,导致再次全GC;
**3)产生大量内存碎片:**CMS基于“mark-clear”算法,清除后会产生大量不连续且不压缩的内存碎片,这将导致在分配大内存对象时无法找到足够的连续内存,从而提前触发另一次全GC动作。
G1收藏家
G1(垃圾优先)是JDK7-u4正式推出的商业收集器。G1是服务器应用程序的垃圾收集器。它的使命是在未来取代CMS collector。
G1收集器特征:
并行性和并发性:可以充分利用多CPU、多核环境的硬件优势,缩短停顿时间;并且可以与用户线程同时执行。
* *代收集:**G1可以独立管理整个堆,不需要其他GC收集器的配合,以不同的方式处理新的对象和存活了一段时间的对象。
**空集成:**整体上采用标签排序算法,部分上采用复制算法(两个区域之间),不会出现内存碎片,不会因为大对象找不到足够连续的空空间而提前触发GC,优于CMS collector。
* *可预测暂停:* *除了追求低暂停,我们还可以建立一个可预测暂停时间模型,允许用户显式指定在一个长度为M毫秒的时间段内,垃圾收集花费的时间不得超过N毫秒,优于CMS collector。
为什么我们可以实现可预测的暂停?
因为可以计划避免整个Java堆的垃圾收集。
G1收藏家保持记忆的概念,分为大小相等的独立区域,新生代和老年期,但它不再是物理隔离。
G1跟踪每个区域以获取其收藏价值,并在后台维护一个优先级列表;
根据每次允许的收集时间,首先回收值最大的区域(垃圾优先这个名字的由来);
这就保证了在有限的时间内,收集效率可以尽可能的高。
如果该对象被另一个区域对象引用怎么办?
判断一个对象是否活的时候需要扫描整个Java堆来保证准确性吗?在其他世代的收藏家身上,也有这样的问题(但G1更突出):新生代回收的时候,要扫描旧时代?无论G1还是其他代收集器,JVM总是使用记忆集来避免全局扫描:每个区域都有一个对应的记忆集;每次写入引用类型数据时,都会产生一个写屏障临时中断操作。然后检查要写入的引用所指向的对象是否与引用类型数据在不同的区域(其他收集器:检查老年对象是否引用新生代对象);如果不同,则通过CardTable将相关引用信息记录在引用所指对象的区域对应的记忆集中;垃圾收集时,在GC根节点的枚举范围内加入记忆集,可以保证不会出现全局扫描和遗漏。
不计算维护记忆集的操作,回收过程可以分为四个步骤(类似于CMS):
1)初始标记:只标记GC根可以直接关联的对象,修改TAMS(Mark Start处的Next Top)的值,以便下一阶段用户程序并发运行时,在正确可用的区域创建新的对象,需要“停止世界”。
2)并发标记:从GC根开始分析可达性,找出幸存对象,需要很长时间,可以和用户线程并发执行。
3)最终标记:在并发标记阶段,修正由于用户线程的持续运行而导致标记发生变化的对象部分的标记记录。虚拟机在并发标记期间在线程记忆集日志中记录对象变化。在最终标记阶段,记忆集日志将被整合到记忆集中,记忆集长于初始标记时间但远短于并发标记时间,需要“停止世界”
4)筛选回收:首先对各个区域的回收价值和成本进行排序,然后根据用户期望的GC暂停时间定制回收计划,最后根据计划回收区域内一些价值较高的垃圾对象。回收时,将幸存对象从一个或多个区域复制到堆上的另一个空区域,并在进程中压缩释放内存;它可以同时进行,减少了暂停时间,提高了处理量。
工作图:
添加描述
基本结构
从Java平台的逻辑结构,我们可以从下图了解JVM:
从上图我们可以清楚的看到Java平台所包含的逻辑模块,也可以知道JDK和JRE的区别。
最后
分享一张jvm知识图,请喜欢(或转发)蟹蟹。
另外还整理了40多套PDF文档:全套Java访谈书手册,7个访谈栏目《性能调优微服务架构的分布式并行编程开源框架》等,包括Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、Concurrency、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB。如果你对此感兴趣,边肖可以免费分享。
信息获取方式:边肖转发文章私信【面试问题】获取以上信息~
重要的事情说三遍,转发转发转发,一定要记得转发!!!
- 1bat的大数据(BAT的大数据来源)
- 2三星s8屏幕上端2(三星s8屏幕上端2个按键)
- 3三星屏幕坏了如何导出(三星屏幕摔坏了如何导出数据么)
- 4红米3x怎么关闭自动更新(红米k40s怎么关闭自动更新)
- 5微信上防止app自动下载软件怎么办(微信上防止app自动下载软件怎么办啊)
- 6押镖多少钱(押镖一个月有多少储备金)
- 7瑞星个人防火墙胡功能(瑞星个人防火墙协议类型有哪些)
- 8cf现在等级是多少(cf等级2020最新)
- 9老滑头多少条鱼(钓鱼老滑头有什么用)
- 10WPS自动调整语法(wps如何修改语法)
- 11dell控制面板防火墙(dell的防火墙怎么关闭)
- 12丑女技能升多少(丑女技能需要满级吗)
- 13智能家居系统怎么样(智能家居系统好吗)
- 14戴尔屏幕(戴尔屏幕闪烁)
- 15y85屏幕信息(vivoy85息屏显示时间怎么设置)
- 16魅蓝note3屏幕出现方格(魅蓝note屏幕竖条纹)
- 17v8手指按屏幕(触屏手指)
- 18金为液晶广告机(液晶广告机lb420)
- 19三星显示器怎么校色(三星显示器 调色)
- 20hkc显示器dvi音频(hkc显示器有音响么)
- 21康佳液晶智能电视机(康佳液晶智能电视机怎么样)
- 22做液晶画板电脑(做液晶画板电脑怎么操作)
- 23液晶屏极化现象原理(液晶屏极化现象原理是什么)
- 24企业网络安全防火墙(企业网络防护)
- 256splus黑屏屏幕不亮(苹果6s plus屏幕突然黑屏)
- 26充电导致屏幕失灵(充电导致屏幕失灵怎么办)
- 27超极本屏幕旋转(笔记本电脑屏幕旋转,怎么转过来?)
- 28igmp防火墙(防火墙配置ipv6)
- 29荣耀王者多少经验(王者荣耀经验多少一级)
- 30lol老将还剩多少(qg老将)