Java(29):基础:JVM的理解和使用(收集自网上资源)

最新Java面试题及答案(Java基础、设计模式、Java虚拟机(jvm)) 毕业季意味着即将找工作面试,以下是我整理的部分Java面试题目,以供面试者参考。 阅读详情

日期:2017/11/16

        今日学习了JVM处理机制,作总结:

一、

      JVM是java visual machine,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

      Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。

一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

即,.java文件编译后的.class文件可以在不同平台的JVM被编译处理,产生对应的字节码文件。

技术分享


二、

        在.class文件被JVM执行之前,java文件要经过编译。Java代码编译是由Java源码编译器来完成,流程图如下所示:

技术分享

                2.1  Java源码编译机制

                  Java 源码编译由以下三个过程组成:

                分析和输入到符号表  +   注解处理  +  语义分析和生成class文件


                2.2 编译结果 -- class文件

            最后生成的class文件由以下部分组成:

                 (1)结构信息。

                        包括class文件格式版本号及各部分的数量与大小的信息

                 (2) 元数据。

                        对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池

                 (3) 方法信息。

                        对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息


三、

         Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:


    

     3.1  类加载机制

           JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:



            1)Bootstrap ClassLoader

                        负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类

            2)Extension ClassLoader

               负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

            3)App ClassLoader

                负责记载classpath中指定的jar包及目录中class

            4)Custom ClassLoader


               属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。


            3.2 类执行机制

            JVM是基于栈的体系结构来执行class字节码的。

            线程创建后,都会产生程序计数器(PC)和栈(Stack),程序计数器存放下一条要执行的指令在方法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有局部变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变量和参数,操作数栈中用于存放方法执行过程中产生的中间结果。

栈的结构如下图所示:

技术分享


四、 JVM垃圾回收机制

            JVM内存组成结构

                 JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:



              1)堆              

              所有通过new创建的对象的内存都在堆中分配,堆的大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:

技术分享

        新生代。新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活的对象转移到Survivor中,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例。

        旧生代。用于存放新生代中经过多次垃圾回收仍然存活的对象

        持久带(Permanent Space)实现方法区,主要存放所有已加载的类信息,方法信息,常量池等等。

            通过-XX:PermSize和-XX:MaxPermSize来指定持久带初始化值和最大值。Permanent Space并不等同于方法区,只不过是Hotspot JVM用Permanent Space来实现方法区而已,有些虚拟机没有Permanent Space而用其他机制来实现方法区。

技术分享


-Xmx:最大堆内存,如:-Xmx512m

-Xms:初始时堆内存,如:-Xms256m

-XX:MaxNewSize:最大年轻区内存

-XX:NewSize:初始时年轻区内存.通常为 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 个 Survivor 空间。实际可用空间为 = Eden + 1 个 Survivor,即 90%

-XX:MaxPermSize:最大持久带内存

-XX:PermSize:初始时持久带内存

-XX:+PrintGCDetails。打印 GC 信息

-XX:NewRatio 新生代与老年代的比例,如 –XX:NewRatio=2,则新生代占整个堆空间的1/3,老年代占2/3

-XX:SurvivorRatio 新生代中 Eden 与 Survivor 的比值。默认值为 8。即 Eden 占新生代空间的 8/10,另外两个 Survivor 各占 1/10


           2)栈

      每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果。

      -xss:设置每个线程的堆栈大小. JDK1.5+ 每个线程堆栈大小为 1M,一般来说如果栈不是很深的话, 1M 是绝对够用了的。



           3)本地方法栈

                 用于支持native方法的执行,存储了每个native方法调用的状态

           4)方法区

                存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。


            更加详细的内容可以自行深入理解...



 五、 JVM内存调优(有待深入研究)

           首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。

           对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC一般由于以下几种情况:

         (1)  旧生代空间不足
               调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象

         (2)  Pemanet Generation空间不足
增大Perm Gen空间,避免太多静态对象

         (3)  统计得到的GC后晋升到旧生代的平均大小大于旧生代剩余空间
控制好新生代和旧生代的比例

         (4)  System.gc()被显示调用
垃圾回收不要手动触发,尽量依靠JVM自身的机制

      调优手段主要是通过控制堆内存的各个部分的比例和GC策略来实现,下面来看看各部分比例不良设置会导致什么后果

           1)新生代设置过小

           一是新生代GC次数非常频繁,增大系统消耗;二是导致大对象直接进入旧生代,占据了旧生代剩余空间,诱发Full GC

           2)新生代设置过大

           一是新生代设置过大会导致旧生代过小(堆总量一定),从而诱发Full GC;二是新生代GC耗时大幅度增加

一般说来新生代占整个堆1/3比较合适

           3)Survivor设置过小

导致对象从eden直接到达旧生代,降低了在新生代的存活时间

           4)Survivor设置过大

导致eden过小,增加了GC频率

           另外,通过-XX:MaxTenuringThreshold=n来控制新生代存活时间,尽量让对象在新生代被回收

           由内存管理和垃圾回收可知新生代和旧生代都有多种GC策略和组合搭配,选择这些策略对于我们这些开发人员是个难题,JVM提供两种较为简单的GC策略的设置方式

           1)吞吐量优先

           JVM以吞吐量为指标,自行选择相应的GC策略及控制新生代与旧生代的大小比例,来达到吞吐量指标。这个值可由-XX:GCTimeRatio=n来设置

           2)暂停时间优先

           JVM以暂停时间为指标,自行选择相应的GC策略及控制新生代与旧生代的大小比例,尽量保证每次GC造成的应用停止时间都在指定的数值范围内完成。这个值可由-XX:MaxGCPauseRatio=n来设置



最后汇总一下JVM常见配置


           堆设置

-Xms:初始堆大小

-Xmx:最大堆大小

-XX:NewSize=n:设置年轻代大小

-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

-XX:MaxPermSize=n:设置持久代大小

           收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseParalledlOldGC:设置并行年老代收集器

-XX:+UseConcMarkSweepGC:设置并发收集器

           垃圾回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

           并行收集器设置

-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。

-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间

-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

           并发收集器设置

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。




【2021最新版】JVM面试题总结(87道题含答案解析) 文章目录1、Java中会存在内存泄漏吗,请简单描述。2、64位JVM中,int的长度是多数?3、Serial与Parallel GC之间的不同之处?4、32位和64位的JVM,int类型变量的长度是多数?5、Java中WeakReference与SoftReference的区别?6、JVM选项-XX:+UseCompressedOops有什么作用?为什么要使用?7、怎样通过Java程序来判断JVM是32位还是64位?8、32位JVM和64位JVM的最大堆内存分别是多数?9、JRE、JDK、JVM及JIT之间 阅读详情

相关推荐

jvm性能调优实战 - 29使用 jstat 摸清线上系统的JVM运行状况

文章目录Pre功能强大的jstatjstat -gc PID其他的jstat命令如何使用jstat工具?新生代对象增长的速率Young GC的触发频率和每次耗时每次Young GC后有多少对象是存活和进入老年代Full GC的触发时机和耗时总结思考题 Pre 之前已经通过带着大家分析GC日志的方式,给大家重新回顾了一遍JVM的整体运行原理,包括对象优先在Eden区分配,Young GC的触发时机和执行过程,对象进入老年代的时机,Full GC的触发时机和执行过程,相信大家通过GC日志可以把JVM整体运行

小工匠 2万+

Java垃圾收集日志以及如何对其进行分析

使用Java或任何其他基于JVM的编程语言时,我们免费提供某...

专业的开发者“讨论” 659

【2022最新版】JVM面试题总结(87道题含答案解析)

最近面试的小伙伴很多,对此整理了一份Java面试题手册:基础知识、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、等等。可以分享给大家学习。 【持续更新中】......

m0_58479954的博客 4225

2020精选阿里JVM面试题(含答案),附深入理解jvm

中高级Java工程师面试必备题,学会JVM调优对于Java工程师来说非常的重要,不管是实际项目中遇到问题,还是面试中,都需要这一块的知识,小编由简入深的,给大家分享一波。 文末有2020精选阿里JVM面试题文档获取方式,小编额外赠送给大家的一本238页深入理解jvm的PDF文档哦! 1.JDK、JRE、JVM关系? 2.启动程序如何查看加载了哪些类,以及加载顺序? 3. class字节码文件10个主要组成部分? 4.画一下jvm内存结构图? 5.程序计数器 6.Java虚拟机栈 .

文章中资料均可获取,有需要请添加yunduoa2019即可 1485

JVM内存模型和性能调优:系列文章 - 导读

学习 Java 虚拟机能深入地理解 Java 这门语言,想要深入学习java的各种细节,很多时候你要深入到字节码层次去分析,你才能得到准确的结论,通过学习JVM你了解JVM历史,内存结构、垃圾回收机制、性能监控工具、认识类的结构体,Java的编译运行优化、字节码剖析等。 课程目标 本课程专门针对于JVM的执行流程、内存分配、垃圾收集等机制进行了综合讲解。...

悟纤学院 2万+

从零搭建一个AF架构项目:基于TIA Portal V19和S7-PLCSIM的仿真调试全流程

本文详细介绍了如何在TIA Portal V19环境中从零搭建西门子Automation Framework(AF架构)项目,包括环境准备、硬件组态、核心组件创建、项目架构分层实现以及仿真调试全流程。通过模块化编程和标准化接口设计,AF架构显著提升工业自动化项目的开发效率和维护便利性,特别适合S7-1500系列PLC的应用开发。

weixin_29313547的博客 673

【2022最新Java面试宝典】—— Java虚拟机(JVM)面试题(51道含答案)

目录一、Java内存模型1. 我们开发人员编写的Java代码是怎么让电脑认识的2. 为什么说java是跨平台语言3. Jdk和Jre和JVM的区别4. 说一下 JVM由那些部分组成,运行流程是什么?5. 说一下 JVM 运行时数据区6. 详细的介绍下程序计数器?(重点理解)7. 详细介绍下Java虚拟机栈?(重点理解)8. 你能给我详细的介绍Java堆吗?(重点理解)9. 能不能解释一下本地方法栈?10. 能不能解释一下方法区(重点理解)11. 什么是JVM字节码执行引擎12. 你听过直接内存吗?13. 知

记录各种Bug解决案例及日常学习内容 1万+

静态与动态LACP链路聚合:原理、配置与排错实战指南

链路聚合技术是提升网络带宽与可靠性的核心方案,通过将多个物理端口逻辑捆绑,实现带宽叠加与链路冗余。其原理基于IEEE 802.3ad标准,通过负载均衡算法将数据流分布到不同物理链路,既避免了数据包乱序,又提升了整体吞吐量。该技术的核心价值在于消除单端口瓶颈、提供毫秒级故障切换,并能简化网络拓扑管理。在企业服务器接入、数据中心互联及虚拟化平台等场景中,链路聚合已成为构建高可用网络的基础。实践中,动态LACP模式通过协议报文协商,能主动检测链路故障并防止配置错误导致的网络环路,相比静态聚合更为可靠。本文将深入解

weixin_31412781的博客 268

Java【jvm面试题】

程序计数器是一块较小的内存空间,它可以看作是:保存当前线程所正在执行的字节码指令的地址(行号)由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都有一个独立的程序计数器,各个线程之间计数器互不影响,独立存储。称之为“线程私有”的内存。程序计数器内存区域是虚拟机中唯一没有规定OutOfMemoryError情况的区域。总结:也可以把它叫做线程计数器。

weixin_43394692的博客 1620

3DMax高效建模与人工智能:一场颠覆传统创作的效率革命

AI与3DMax的结合,不仅是工具效率的升级,更是一场创作范式的革命。从“手动雕刻”到“智能共生”,设计师的角色正从执行者转向决策者。正如网友所言:“AI不是替代人类,而是赋予凡人以神笔。”在这场变革中,唯有拥抱技术、深耕创意,方能在数字艺术的浪潮中立于潮头。参考文献与工具推荐技术原理:火星时代资讯《人工智能和三维建模》工具实测:哔哩哔哩《tyDiffusion 3dsMax应用》9、Tripo AI官网教育案例:原创论文《人工智能技术介入三维动画课程建设》

m0_46478534的博客 3011

STM32CubeMx + FatFs 实战:SD卡DMA传输中断回调问题深度解析

本文深度解析了在STM32CubeMx环境下,结合FatFs文件系统并使用DMA进行SD卡读写时,程序可能出现的“卡死”问题。核心原因在于HAL库的弱函数回调机制未被正确处理,导致DMA传输完成中断后,状态机锁死。文章提供了两种实战修复方案:直接修改HAL库文件或在用户代码中重写回调函数,并给出了关键的配置检查点与调试技巧,帮助开发者彻底解决SD卡DMA传输中断回调失效的难题。

weixin_29176179的博客 330

深入理解JVM

比较全的整理,不啰嗦的同时又能get到重点,面试前看一看非常合适

m0_52255061的博客 2909

华为OD新系统机试真题 - 失灵的键盘(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题 【失灵的键盘】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【失灵的键盘】

qq_45776114的博客 1064

java jre jvm_深入理解JRE和JVM的区别及联系

你对JRE和JVM的概念是否熟悉,这里和大家分享一下两者的区别,所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分,首先让我们来看一下这两者的概念。JRE和JVM的区别◆JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java程...

weixin_33513842的博客 559

广东省道路工程检测练习试题(单选题)真题

1.一般项目的合格点率应达到( ),且不合格点的最大偏差值不得大于规定允许偏差值的1.5倍。A.不低于75%B.不低于80%C.不低于85%D.不低于90%答案:B2.进行土路基平整度检测时,当路宽小于9m,检测点数应为( )A.1B.2C.3D.4答案:A3.根据《城镇道路工程施工与质量验收规范》,在分部工程中,根据工种、材料、施工工艺等划分的是( )A.单位工程B.分项工程C.分部工程D.工序工程答案:B4.根据《城镇道路工程施工与质量验收规范》,土方路基压实度的检测频率为每1000m每压实层抽检( )

ZShy001238的博客 684

携程机票数据爬取实战:使用 Python 获取携程网机票信息

通过本篇博客,我们详细介绍了如何使用 Python 爬取携程网的机票信息,涉及了静态网页爬取(使用 Requests 和 BeautifulSoup)和动态网页爬取(使用 Selenium)两种方法。通过获取的数据,我们不仅能够进行票价分析,还可以构建更为复杂的预测模型或趋势分析工具。爬虫技术不仅能够帮助我们收集有价值的数据,还能够为商业决策提供数据支持。在实际应用中,我们可以结合更多的分析方法,如自然语言处理、图像处理等,进一步提升数据的价值。

2201_76125261的博客 1657

jvm的GC分代收集算法及jvm配置说明

官方文献 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ https://docs.oracle.com/javase/specs/index.html     摘要 当前商业虚拟机的垃圾收集都采用“分代收集”(Generational...

rubbertree的专栏 740

Eplan设计师必会—伺服安全回路的设计方法

本文介绍了在EPLAN中设计伺服STO安全回路的方法。首先需查阅伺服驱动器说明书确定STO接线端子,重点关注双通道配置。设计步骤包括:使用黑盒子功能绘制驱动器外形,正确标注STO接线点,并连接安全继电器或PLC的安全输出。关键注意事项有:必须采用双通道独立布线,确保同步动作,遵循故障安全原则,使用常闭触点串联回路。文中以西门子V90和汇川伺服为例说明具体接线要求,并附有项目实例参考。

Qinmingyue13的博客 436

Java技术体系之基础能力篇(五)——深入理解JVM原理

1、Java概述 1.1 Java技术体系   从广义上讲,Kotlin、Clojure、JRuby、Groovy等运行于Java虚拟机上的编程语言及其相关的程序都属于Java技术体系中的一员。如果仅从传统意义上来看,JCP官方所定义的Java技术体系包括了以下几个组成部分: Java程序设计语言 各种硬件平台上的Java虚拟机实现 Class文件格式 Java类库API 来自商业机构和开源社区的第三方Java类库   以上是根据Java各个组成部分的功能来进行划分,如果按照技术所服务的领域来划分,或者

qsmiley10的博客 3365

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java开发常见面试题详解(并发,JVM)

预览 并发 问题 详解 请谈谈你对volatile的理解 link CAS你知道吗? link 原子类Atomiclntegerl的ABA问题谈谈?原子更新引用知道吗? link 我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案 link 公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁 link CountDownLatch/CyclicBarrier/Semaphore使用过吗? link 阻塞队列知道吗? l

KISS 9万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java垃圾收集优化分步指南

使用Java应用程序有很多好处。 特别是与C / C ++之类的语言相&#...

专业的开发者“讨论” 579

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

29岁vivo员工吐槽:java基础编程题及答案

前言 由于作者面试过程中高度紧张,本文中只列出了自己还记得的部分题目。 经历了漫长一个月的等待,终于在前几天通过面试官获悉已被蚂蚁金服录取,这期间的焦虑、痛苦自不必说,知道被录取的那一刻,一整年的阴霾都一扫而空了。 笔者面的是阿里的Java研发工程师岗,面试流程是4轮技术面+1轮hr。 文末可以获取面试资料参考 一、一面 1小时40几分钟,基本会的被问完了 1.介绍项目,考虑没考虑过服务器挂了怎么办 这里应该是考查系统架构 2.面向对象特性 3.怎么理解多态 4.接口和抽象类的区别 5.说说并发是怎么回事

m0_56604931的博客 146

Java虚拟机(JVM)面试题和知识点整理(2021最新版)更新中ing

前言 一、JVM内存结构(区域) 二、JVM线程模型 三、类加载机制 加载器 1、启动类加载器 2、扩展类加载器 3、应用程序类加载器 双亲委派模型 双亲委派模式的工作原理 优点 四、JIT即时编译 垃圾回收gc 4大算法 1、标记清除 2、复制算法 3、标记压缩 4、分代收集算法 7大垃圾收集器 CMS收集器 哪些情况下对象内存分配会直接进入老年代? 方法区中可回收哪些对象? JDK HotSpot虚拟机方法区调整 请描述下GC流程?或者一个对象从创建到GC的过程? 前言 JVM相关的知识点整理,梳理常见

laker的博客 1537

java之JVM学习全过程学习记录

java之JVM学习记录其中有许多借鉴综合,感谢大佬们,一起学习加油 JAVA的三种常量池字符串常量池,运行时常量池,class文件常量池 此外,Java有三种常量池,即**字符串常量池(又叫全局字符串池)、class文件常量池、运行时常量池**。 **1. 字符串常量池(也叫全局字符串池、string pool、string literal pool)** 字符串常量池 Interned Strings **2. 运行时常量池(runtime constant pool)** 当程序运行到某个类

weixin_45673401的博客 1308

2021金三银四必备JVM知识点与JVM面试题分享

中高级Java工程师面试必备题,学会JVM调优对于Java工程师来说非常的重要,不管是实际项目中遇到问题,还是面试中,都需要这一块的知识,小编由简入深的,给大家分享一波。 文末有2020精选阿里JVM面试题文档获取方式,小编额外赠送给大家的一本238页深入理解jvm的PDF文档哦! 1.JDK、JRE、JVM关系? 2.启动程序如何查看加载了哪些类,以及加载顺序? class字节码文件10个主要组成部分? 4.画一下jvm内存结构图? 5.程序计数器 6.Java虚拟机栈 7.本地方法栈 8.Jav

weixin_47345084的博客 401

Java基础(四)JVM

类加载是指将类的字节码文件(.class 文件)加载到 Java 虚拟机中,并生成对应的 Class 对象的过程。在 Java 程序运行期间,类加载器负责将字节码文件加载到内存中,并转换为可以被虚拟机使用的类对象,以便程序运行时可以使用这些类来创建对象、调用方法等操作。加载阶段是类加载过程的第一步,其目的是将类的字节码文件加载到内存中。加载阶段由类加载器完成,类加载器根据类的全限定名(Fully Qualified Name)从文件系统、网络等位置找到对应的字节码文件,并将其读取到内存中。

伟伟_爱撒娇的博客 887
上一篇: Java(26):MVC框架基础:Servlet+Jsp+javabean(2)
下一篇: Java(28):基础语法(2):修饰符的理解和使用
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值