我是JVM(HotSpot)的新手,并尝试了解它的架构及其工作原理,所以我的问题是所有的方法(静态和非静态)都被转换成字节码吗?当JVM加载类文件时,它是否将所有方法加载到某个地方?像方法区?或本机方法堆栈?
答案 0 :(得分:2)
它依赖于JVM实现 - 不同的JVM可以选择以不同的方式处理它(只要它们符合Java规范)。所以你没有绝对的保证。
在Sun / Oracle JVM中,方法数据被加载到一个称为“永久生成”的特殊内存区域,该区域是垃圾收集器为类等长期对象保留的内存区域。
大多数其他“工业级”JVM可能会做类似的事情。
请参阅:
P.S。
这是非常高级的东西 - 你肯定不需要知道任何关于这一点的东西,以充分利用Java和/或JVM。您通常应该假设JVM代表您进行内存管理,并且会有效地进行内存管理 - 它需要专家多年的调优。
JVM的重点是让你从具体平台的实现细节中抽象出来,毕竟......
答案 1 :(得分:1)
准确地说,
所有方法(静态和非静态)都将加载到方法中 区域。
方法调用,局部变量,中间结果和行 执行将存储在Stack。
如果正在执行某个方法,它将位于堆栈顶部。一旦它 完成执行所有结果将被删除,如果有的话 本地参考变量,它们将无效。
无论正在执行哪种方法,方法Area都有类 信息。它类似于浏览器中的缓存,包含所需的信息 对于JVM。
答案 2 :(得分:1)
1。)是否将所有方法(静态和非静态)都转换为字节码?
2。)JVM加载类文件时,是否将所有方法都加载到某个地方?喜欢方法区吗?或本机方法堆栈?
答案 3 :(得分:0)
是的,所有方法都被翻译成字节码。字节码文件是jvm将从中加载的中间文件。
当jvm加载类文件时? 它将在首次使用类时执行 - 包含几种情况:
是的,方法被加载到方法区域。换句话说,字节代码文件被加载到方法区域中。
答案 4 :(得分:0)
我一般建议您阅读这篇关于JVM基本知识的精彩文章。
https://anturis.com/blog/java-virtual-machine-the-essential-guide/
答案 5 :(得分:0)
Java进程占用的内存可以分为Java和Native堆。 Java堆是由大小为Xmx的jvm分配的内存部分,用于java对象分配,其中作为由JNI代码分配的本机内存部分和由本机语言完成的分配。 这是将所有方法(静态和非静态)转换为字节码吗?
用java编写的代码被翻译成字节代码,无论访问说明符还是修饰符
都可以访问
当JVM加载类文件时,是否将所有方法加载到某个地方?像方法区域?或本机方法堆栈?
类(方法)区域存储每类结构,例如运行时常量池,字段和方法数据,方法代码。