相关疑难解决方法(0)

内存中的方法表示是什么?

在思考Java/C#中的编程时,我想知道如何在内存中表示属于对象的方法,以及这个事实如何涉及多线程.

  1. 是单独为内存中的每个对象实例化的方法,还是同一类型的所有对象共享方法的一个实例?
  2. 如果是后者,执行线程如何知道要使用哪个对象的属性?
  3. 是否可以在C#中使用反射修改方法的代码,并且只能修改同一类型的多个对象中的一个对象?
  4. 一个不使用类属性的静态方法总是线程安全吗?

我试着对这些问题下定决心,但我对他们的答案非常不确定.

c# java memory clr jvm

22
推荐指数
2
解决办法
2838
查看次数

理解堆上的静态和非静态方法表示之间的区别

我已经阅读了一些关于这个主题的帖子:

但我对它们所说明的概念感到困惑:

静态方法(实际上是所有方法)以及静态变量都存储在堆的PermGen部分中,因为它们是反射数据的一部分(类相关数据,而不是实例相关).

因此,方法,无论是否static只存储在类中的堆上的一个副本.现在只有一个副本在类中,我解释为所有方法都属于该类,那么为什么Java只能使用实例化的实例调用非静态方法?

为什么我们有非静态方法属于实例的概念,而不是类?

java static heap-memory permgen

4
推荐指数
1
解决办法
788
查看次数

类对象关系如何工作?

当我们创建一个类的实例时会发生什么?我的意思是,该类的每个字段和方法都将在该对象内(具有已分配的内存),或者它内部没有任何内容并且具有对其类的引用.(第一种选择看起来像浪费内存.)

java oop

3
推荐指数
1
解决办法
75
查看次数

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

问题

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

背景

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

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

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

java jvm

2
推荐指数
1
解决办法
865
查看次数

标签 统计

java ×4

jvm ×2

c# ×1

clr ×1

heap-memory ×1

memory ×1

oop ×1

permgen ×1

static ×1