如何检查Java虚拟机中存储方法的区域

Don*_* Ch 2 java jvm

问题

  1. 我的对象存储方法在哪里?
  2. 如果我转储我的Java应用程序,我可以看到该区域吗?

背景

我正在尝试测量对象的大小,并意识到方法不会存储在与对象数据相同的位置.

我正试图"看到"方法的代码存储在正在运行的Java应用程序中.

我尝试使用jmap转储堆并使用jhat检查转储,但是我找不到任何有用的关于我的类的方法的地方.

Tom*_*icz 5

我的对象存储方法在哪里

它们存储在一个Class保存在PemGen空间中的对象中.

如果我转储我的Java应用程序,我可以看到该区域吗?

这不是微不足道的.JVM执行几个优化,如JIT编译,这使得此任务更难.

我正试图"看到"方法的代码存储在正在运行的Java应用程序中.

您知道每个只有一个每个方法的副本,而不是每个实例?这意味着一旦类被加载ClassLoader,该类的所有方法都存储在内存中.您创建的实例数无关紧要.话虽这么说,你可能并不关心方法消耗多少内存.

也可以看看: