问题一:编译生成的字节码在不同的平台上是否相同
编译生成的字节码在不同的平台上是否相同
参考回答:
是的,编译生成的字节码在不同的平台上是相同的。但是,当这些字节码通过JVM转换成机器码时,由于不同平台的机器语言可能有所不同,所以转换后的机器码可能会有所不同。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615414
问题二:能不能详细介绍下JVM?
能不能详细介绍下JVM?
参考回答:
JVM------Java Virtual Machine.JVM是Java平台的基础,与实际机器一样,他有自己的指令集(类似CPU通过指令操作程序运行),并在运行时操作不同的内存区域(JVM内存体系)。Java虚拟机位于操作系统之上(如下图所示),将通过JAVAC命令编译后的字节码加载到其内存区域,通过解释器将字节码翻译成CPU能识别的机器码行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615415
问题三:JAVA程序在执行时是如何将编译后的代码加载到内存中运行的?
JAVA程序在执行时是如何将编译后的代码加载到内存中运行的?
参考回答:
JAVA源代码文件通过编译后变成虚拟机可以识别的字节码,JAVA程序在执行时,会通过类加载器把字节码加载到虚拟机的内存中(虚拟机的内存是一个逻辑概念,相当于是对主内存的一个抽象,实际上真实的数据还是存放在主存中)
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615416
问题四:JVM内存结构主要包括哪些部分?
JVM内存结构主要包括哪些部分?
参考回答:
Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。每个区域都有各自的作用。分析 JVM 内存结构,主要就是分析JVM 运行时数据存储区域。JVM 的运行时数据区主要包括:堆、栈、方法区、程序计数器等。而 JVM 的优化问题主要在线程共享的数据区中:堆、方法区。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615417
问题五:方法区,也就是非堆(non-heap),主要工作原理是什么的?
方法区,也就是非堆(non-heap),主要工作原理是什么的?
参考回答:
方法区用于存储已被虚拟机加载的类信息,常量、静态变量,即时编译后的代码等数据。方法区中最著名的就是CLASS对象,CLASS对象中存放了类的元数据信息,包括:类的名称、类的加载器、类的方法、类的注解等。当我们new一个新对象或者引用静态成员变量时,Java虚拟机(JVM)中的类加载器子系统会将对应Class对象加载到JVM中,然后JVM再根据这个类型信息相关的Class对象创建我们需要实例对象或者提供静态变量的引用值。注意,我们定义的一个类,无论创建多少个实例对象,在JVM中都只有一个Class对象与其对应,即:在内存中每个类有且只有一个相对应的Class对象,如图:
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615418