深入jvm 01. java代码是如何运行的?
1、为什么要用java虚拟机运行java代码?
①在虚拟机中运行,给java提供了可移植性,一旦java源码被编译为字节码,就可以在不同平台的java虚拟机上运行,称之为"一次编写,到处运行"。
②虚拟机为程序员提供了代码托管环境,它可以帮助java程序员做自动内存管理与垃圾回收相关工作,以及提供数组越界等的动态监测,让程序员更关注于代码的业务逻辑。
2、jvm怎么运行java字节码的?
首先,使用前端编译器将java源码编译为字节码文件,然后将字节码文件加载到java虚拟机中。jvm将运行时内存区域划分为5个部分:堆、方法区( jdk8以前叫永久代,jdk8开始叫元空间 )、PC寄存器、java方法栈和本地方法栈。加载后的java类存放于方法区中。实际运行时,jvm会执行方法区中的代码。
在运行过程中,每当调用一个java方法时,jvm会在当前线程的java方法栈中生成一个栈帧,用来存放局部变量表和操作数栈。当方法执行完成退出时,当前线程的当前栈帧从栈中弹出。
在硬件层面,java字节码不能直接在物理机上运行,需要jvm将字节码翻译为机器码。一般有两种翻译形式:解释执行和即时编译。解释执行就是将字节码逐条翻译并执行,优势在于无需等待编译;即时编译是将一个方法的字节码编译成机器码然后再执行,优势在于实际运行速度更快。Hotspot默认使用mixed模式,综合解释执行和即时编译的优点,先解释执行字节码,对于热点代码再以方法为单位进行即时编译,下次调用该方法时,使用编译后的机器码运行。
本文地址:https://blog.csdn.net/Longstar_L/article/details/107380543
上一篇: vue项目css中修改子组件样式又不会造成全局污染的方法
下一篇: JavaEE——回顾
推荐阅读
-
[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的
-
深入jvm 01. java代码是如何运行的?
-
Java程序员必备基础:Java代码是怎么运行的?
-
Java程序员必备基础:Java代码是怎么运行的?
-
嵌入式--深入理解单片机和单片机程序是如何运行起来的以及单片机的ROM和RAM
-
浅谈一段java代码是如何执行的
-
如何在java程序中运行js的代码分享
-
JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇
-
[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的
-
[Java多线程编程之一] Java代码是怎么运行起来的?看完这篇你就懂了!