的组成和运转流程-JVM (运转的概念)
思索:JVM由那些部分组成,运转流程是什么?
1.JVM由那些部分组成,运转流程是什么?
JVM是什么
好处:
一次性编写,四处运转
智能内存治理,渣滓回收机制
思索:JVM由哪些部分组成,运转流程是什么?
从图中可以看出JVM的关键组成部分
ClassLoader(类加载器)
Runtime/>
java虚构机关于多线程是经过线程轮番切换并且调配线程口头期间。在任何的一个期间点上,一个处置器只会处置口头一个线程,假设以后被口头的这个线程它所调配的口头期间用完了【挂起】。处置器会切换到另外的一个线程过去启动口头。并且这个线程的口头期间用完了,接着处置器就会又来口头被挂起的这个线程。
那么如今有一个疑问就是,以后处置器如何能够知道,关于这个被挂起的线程,它上一次性口头到了哪里?那么这时就须要从程序计数器中来回去到以后的这个线程他上一次性口头的行号,而后接着继续向下口头。
程序计数器是JVM规范中惟逐一个没有规则产生OOM的区域,所以这个空间也不会启动GC
3.你能给我详细的引见Java堆吗?
Java堆是Java虚构机(JVM)运转时数据区的一部分,线程共享的区域:关键用来保留对象实例,数组等,当堆中没有内存空间可调配给实例,也不可再裁减时,则抛出OutOfMemoryError意外。
Java堆的一些关键消息:
年轻代:年轻代被划分为三部分,Eden区和两个大小严厉相反的Survivor区,依据JVM的战略,在经过几次渣滓搜集后,任然存活于Survivor的对象将被移动到老年代区间。
老年代:在重生代中教训了一些轮次的对象最终会被升职到老年代。老年代经常使用不同的渣滓搜集算法,通常驳回"标志-清算"或"标志-整顿"的形式启动渣滓回收。
耐久代:在Java8之前的版本中,耐久代用于存储类消息、方法消息等。从Java8开局,耐久代被元空间(Metaspace)取代,类消息被存储在本地内存中。
元空间:保留的类消息、静态变量、常量、编译后的代码
为了防止方法区产生OOM,所以在java8中将堆上的方法区【终身代】给移动到了本地内存上,从新开拓了一块空间,叫做元空间。那么如今就可以防止掉OOM的产生了。
元空间(MetaSpace)引见
在HotSpotJVM中,终身代(≈方法区)中用于寄存类和方法的元数据以及常量池,比如Class和Method。每当一个类首次被加载的时刻,它的元数据都会放到终身代中。
终身代是有大小限度的,因此假设加载的类太多,很有或许造成终身代内存溢出,即OutOfMemoryError,为此不得不对虚构机做调优。
那么,Java8中PermGen为什么被移出HotSpotJVM了?
官方给出了解释:
ThisispartoftheJRockitandHotspotconvergenceeffort.JRockitcustomersdonotneedtoconfigurethepermanentgeneration(sinceJRockitdoesnothaveapermanentgeneration)andareaccustomedtonotconfiguringthepermanentgeneration.移除终身代是为融合HotSpotJVM与JRockitVM而做出的致力,由于JRockit没有终身代,不须要性能终身代。
1)由于PermGen内存经常会溢出,引发OutOfMemoryError,因此JVM的开发者宿愿这一块内存可以更灵敏地被治理,不要再经常产生这样的OOM。
2)移除PermGen可以促成HotSpotJVM与JRockitVM的融合,由于JRockit没有终身代。
准确来说,Perm区中的字符串常量池被移到了堆内存中是在Java7之后,Java8时,PermGen被元空间替代,其余内容比如类元消息、字段、静态属性、方法、常量等都移动到元空间区。比如java/lang/Object类元消息、静态属性System.out、整型常量等。
元空间的实质和终身代相似,都是对JVM规范中方法区的成功。不过元空间与终身代之间最大的区别在于:元空间并不在虚构机中,而是经常使用本地内存。因此,自动状况下,元空间的大小仅受本地内存限度。
4.什么是虚构机栈?
JavaVirtualhineStacks(java虚构机栈)
图片
1)渣滓回收能否触及栈内存?
渣滓回收关键指就是堆内存,当栈帧弹栈以后,内存就会监禁
2)栈内存调配越大越好吗?
未必,自动的栈内存通常为1024k
栈帧过大会造成线程数变少,例如,机器总内存为512m,目前能优惠的线程数则为512个,假设把栈内存改为2048k,那么能优惠的栈帧就会减半
3)方法内的部分变量能否线程安保?
栈内存溢出状况
总结:
1)堆处置的是对象实例存储的疑问,渣滓回收器治理的关键区域。
2.)方法区可以以为是堆的一部分,用于存储已被虚构机加载的消息,常量、静态变量、即时编译器编译后的代码。
3)栈处置的是程序运转的疑问,栈外面存的是栈帧,栈帧外面存的是部分变量表、操作数栈、灵活链接、方法进口等消息。
4)本地方法栈与栈性能相反,本地方法栈口头的是本地方法,一个Java调用非Java代码的接口。
5)程序计数器(PC寄存器)程序计数器中寄存的是以后线程所口头的字节码的行数。JVM上班时就是经过扭转这个计数器的值来选取下一个须要口头的字节码指令。
5.JVM组成面试题
面试官:JVM由那些部分组成,运转流程是什么?
候选人:
在JVM中共有四大部分,区分是ClassLoader(类加载器)、Runtime>
Tags:点击:()评论:()Graalvm替代JVM真的可以带来渺小的性能长处吗?引见SpringBoot有助于轻松开发独立的、可用于消费的Spring运行程序。它对Spring平台和第三方库驳回执著己见的方法:以起码的性能简化设置环节。长处:易于经常使用:SpringBoo...【详细内容】2023-12-25Search: 点击:(126)评论:(0)参与收藏 了解Java虚构机(JVM):优化代码口头效率的外部机制Java虚构机(JavaVirtualMachine,JVM)是Java程序运转的外围组件,它担任将Java源代码编译成字节码并口头。JVM具备外部机制来优化代码的口头效率,包括即时编译(Just-In-TimeCompi...【详细内容】2023-12-14Search: 点击:(219)评论:(0)参与收藏 深化了解Java的GC原理,把握JVM性能调优!JVM性能调优是一个复杂的环节,须要联合详细的运行程序特性和需求来启动调优。不同的运行场景或许须要不同的调优战略。关于Java开发人员来说,启动程序的性能优化是很有应战...【详细内容】2023-12-12Search: 点击:(196)评论:(0)参与收藏 GC是什么?为什么要GC?JVM渣滓回收算法有哪些?MajorGC老年代区域的渣滓回收,老年代空间无余时,会先尝试触发MinorGC。MinorGC之后空间还无余,则会触发MajorGC,MajorGC速度比拟慢,暂停期间长。图片1Java渣滓回收机制(GC...【详细内容】2023-12-07Search: 点击:(223)评论:(0)参与收藏 JVM由那些部分组成,运转流程是什么?思索:JVM由那些部分组成,运转流程是什么?1.JVM由那些部分组成,运转流程是什么?JVM是什么好处:一次性编写,四处运转智能内存治理,渣滓回收机制思索:JVM由哪些部分组成,运转流程是什么?...【详细内容】2023-12-06Search: 点击:(204)评论:(0)参与收藏 JVM的调优罕用参数调优目标JVM调优的目标是为了提高Java运行程序的性能和稳固性。经过优化JVM的性能和参数设置,可以缩小内存占用、提高渣滓回收效率、优化线程治理等,从而优化运行程序的照应速...【详细内容】2023-11-10Search: 点击:(201)评论:(0)参与收藏 JVM解释和编译指南Java是一种跨平台的编程言语。程序源代码会被编译为字节码bytecode,而后字节码在运转时被转换为机器码machinecode。解释器interpreter在物理机器上模拟出的形象计算机...【详细内容】2023-11-07Search: 点击:(365)评论:(0)参与收藏 深化了解并发编程艺术之JVM内存模型java内存模型由来咱们知道不同的计算机配件和操作系统的,所遵照的规范以及计算机内存模型是有区别的,也就象征着咱们开发的程序放在某个计算机配件和操作系统上运转是反常的,而...【详细内容】2023-10-27Search: 点击:(428)评论:(0)参与收藏 OOM意外会造成JVM分开吗?相熟Java开发的人,应该会经常遇到的意外:OOM,那么这个意外会造成JVM虚构机分开吗?论断Java虚构机(JVM)在运转Java运行时,或许会遇到内存无余的状况,从而抛出OutOfMemoryError(OOM)。...【详细内容】2023-10-13Search: 点击:(243)评论:(0)参与收藏 JVM是如何判定对象已死的?学JVM必会的常识!大家好,我是BookSea。作为一名Java程序员,咱们每天都在程序里不停地去new对象,然而你知道这些被new进去的对象,最后是怎样被回收的吗?在堆外面寄存着Java环球中简直一切的对象实...【详细内容】2023-10-08Search: 点击:(333)评论:(0)参与收藏 ▌繁难百科介绍Java8内存治理原了解析及内存缺点排查通常本文引见Java8虚构机的内存区域划分、内存渣滓回出上班原了解析、虚构机内存调配性能,以及各渣滓搜集器优缺陷及场景运行、通常内存缺点场景排查诊断,繁难读者面临内存缺点时...【详细内容】2024-03-20vivo互联网技术Tags: 点击:(14)评论:(0)参与收藏 如何编写高性能的Java代码作者|波哥审校|重楼在当今软件开发畛域,编写高性能的Java代码是至关关键的。Java作为一种盛行的编程言语,领有弱小的生态系统和丰盛的工具链,然而要写出性能优秀的Java代码...【详细内容】2024-03-2051CTOTags:Java代码 点击:(19)评论:(0)参与收藏 在Java运行程序中监禁峰值性能:性能文件疏导优化(PGO)概述译者|李睿审校|重楼在Java开发畛域,优化运行程序的性能是开发人员的继续谋求。性能文件疏导优化(Profile-GuidedOptimization,PGO)是一种性能弱小的技术,能够清楚地提高Ja...【详细内容】2024-03-1851CTOTags: 点击:(24)评论:(0)参与收藏 Java消费环境下性能监控与调优详解堆是JVM内存中最大的一块内存空间,该内存被一切线程共享,简直一切对象和数组都被调配到了堆内存中。堆被划分为重生代和老年代,重生代又被进一步划分为Eden和Survivor区,...【详细内容】2024-02-04大雷家吃饭Tags: 点击:(55)评论:(0)参与收藏 在名目中如何防止和处置Java内存走漏疑问在Java中,内存走漏通常指的是程序中存在一些不再经常使用的对象或数据结构依然坚持对内存的援用,从而造成这些对象不可被渣滓回收器回收,最终造成内存占用不时参与,进而影响程序的性...【详细内容】2024-02-01编程技术汇今天头条Tags: 点击:(68)评论:(0)参与收藏 Java中的缓存技术及其经常使用场景Java中的缓存技术是一种优化手腕,用于提高运行程序的性能和照应速度。缓存技术经过将计算结果或许经常访问的数据存储在极速访问的存储介质中,以便下次须要时可以更快地失掉。...【详细内容】2024-01-30编程技术汇Tags: 点击:(72)评论:(0)参与收藏 JDK17与JDK11特性差异浅谈从JDK11到JDK17,Java的开展教训了一系列关键的里程碑。其中最关键的是JDK17的颁布,这是一个常年允许(LTS)版本,它将取得常年的降级和允许,有助于坚持程序的稳固性和牢靠性...【详细内容】2024-01-26政采云技术51CTOTags: 点击:(88)评论:(0)参与收藏 Java并发编程高阶技术随着计算机配件的开展,多核处置器的遍及和内存容量的参与,应用多线程成功异步并发成为优化程序性能的关键路径。在Java中,多线程的经常使用能够更好地施展配件资源,提高程序的照应...【详细内容】2024-01-19大雷家吃饭Tags: 点击:(105)评论:(0)参与收藏 这篇文章彻底让你了解Java与RPA前段期间降级系统的时刻,发现多了一个名为PowerAutomate的运行,关上了解后发现是一个智能化运行,依据其形容,可以智能口头一切日常义务,说的还是比拟夸张,繁难用了下,关于office、...【详细内容】2024-01-17Java技术指北微信群众号Tags: 点击:(95)评论:(0)参与收藏 Java在2023年依然盛行的25个要素译者|刘汪洋审校|重楼学习Java的环节中,我看法到在90年代末OOP正值鼎盛期间,Java作为能够真正成功这些概念的言语显得尤为突出(虽然我此前学过C++,但相比Java影响...【详细内容】2024-01-10刘汪洋51CTOTags: 点击:(74)评论:(0)参与收藏简述JAVA程序的编辑编译和运行过程
Java应用程序的开发周期包括编译、下载、解释和执行几个部分。 Java编译程序将 Java源程序翻译为JVM可执行代码--字节码。 Java将符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查 表来确定一个方法所在的地址。 这样就有效的保证了Java的可移植性和安全性。 运行JVM字节码的工作是由解释器( java命令 )来完成的。 解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。 装入代码的工作由类装载器(class loader)完成。 类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。 当类装载器装入一个类时,该类被放 在自己的名字空间中。 除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。 在本台计算机上的所有类都在同一地址空间内,而所有从外 部引进的类,都有一个自己独立的名字空间。 这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。 当装入 了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。 解释器为符号引用同特定的地址空间建立对应关系及查询表。 通过在这一阶段确定代码的 内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
什么是Java的JVM?
Java的JVM(Java Virtual Machine)是Java程序运行的平台,它负责加载、执行Java字节码程序,并管理内存、废品回收等运行时操作。JVM是Java SE架构的重要组成部分,不同的JVM实现不同的Java规范,例如Sun公司的JVM实现了Java SE 5.0规范,IBM公司的JVM实现了Java SE 7及以上规范。
JVM的主要组成部分包括:
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。