我最近开发了一个需要了解JVM中发生了什么,我正在寻找一些可以解释如下内容的文档或教程:
我知道不同的实施会有所不同,但我会采取你给我的任何材料。比一般的架构概述更接近代码。有些人知道很酷,我不知道在哪里可以找到它。我知道这个问题可能听起来很幼稚。)
答案 0 :(得分:0)
1) JVM boots up and setups up the various memory areas that the GC
will be managing, it will also setup some system threads
2)Look the jar file manifest to determine the class that has the main method to load
3)Load the main class and verify that the byte code in the just loaded class is correct and not doing anything illegal.
4)resolve what classes are needed by the class being loaded and load those classes each class being loaded goes through step 3 and 4
5)Find the the byte code for the main method and execute it.
This is just a brief description
You can find everydetail in the book Inside the Java Virtual Machine
2nd Edition
答案 1 :(得分:0)
在开始时创建了哪些线程以及为什么?
我建议你带一个简单程序的线程转储并谷歌每个线程名称。他们中的大多数你不需要知道任何事情。
GC通常如何处理内存,GC负责什么以及它如何适合JVM标准?
GC负责清理不再占用空间的内存。它应该以有效的方式进行。
JVM如何处理不同类型的invoke *操作码?它如何执行方法查找?
如果您需要了解这些内容,我建议您在规范中了解它们。在那之前,我会假设如果你认为你需要知道这些做了什么,那你就做错了。
方法区域是如何组织的,那里存储的是什么?
你有Heap,Stacks,Perm Gen / Metaspace,直接内存,内存映射文件和共享库。
需要担心的主要问题是存储对象的堆,以及可能用于Java的代码的Perm Gen< = 7。
方法堆栈如何与方法区域一起使用?
每次进行实际通话时,堆栈都会增长。如果内联呼叫,它可能会变少,或者根本不变。
JVM如何处理线程,准备和执行?
没有。操作系统和CPU完成所有实际工作。
我最近发现需要了解JVM中发生的事情
你可以学到很多东西,但除非你有可能使用它,它可能会大约1%,你会忘记它。我建议你专注于更具体的问题和直接有用的信息。例如有超过500个Java选项,但很少有人知道他们都做了什么。你可能只需要知道5而不需要了解它们。