加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中加载类时如何管理内存?

发布时间:2020-12-15 03:09:02 所属栏目:Java 来源:网络整理
导读:想象一下,我有一个包含10个方法的类,我需要从类中实例化10个对象. 问题是:JVM是否会在对象创建时为10个实例分配10个不同的内存空间(我的意思是在我调用构造函数时,即新的MyClass();?或者它将在内存和每个实例中调用类定义一次这10个方法中的每一个,在运行
想象一下,我有一个包含10个方法的类,我需要从类中实例化10个对象.
问题是:JVM是否会在对象创建时为10个实例分配10个不同的内存空间(我的意思是在我调用构造函数时,即新的MyClass();?或者它将在内存和每个实例中调用类定义一次这10个方法中的每一个,在运行时,JVM都会分配内存吗?

为了清除一些误解,我的问题是在创建对象时,我知道所有数据成员都分配在堆内存中,但我不确定尚未调用的方法是否在内存中为每个对象分配不同或者不?

解决方法

Will JVM allocate 10 different memory spaces for 10 instances at object creation time (I mean at the time I call the constructor i.e. new MyClass();

它可能会做,但是通过逃逸分析,它可以将它们放在堆栈上或完全消除它们.

or it will load the class definition once in memory and each instance while calling each of those 10 methods,at run time,JVM will allocate the memory?

如果您有一个ClassLoader,您将获得该类的一个实例,但是如果每个实例都有自己的ClassLoader,您将在每个ClassLoader中获得该类的副本.注意:每个ClassLoader可以具有相同名称的不同版本的类.

To clear some misunderstanding,my question is when creating an object,I know that all data members are allocated in heap memory,

它在PermGen(Java< 7)或MetaSpace(Java 8)中存储在堆中的类和方法信息(包括字节代码) 实际的实例在名义上被添加到堆中,但不一定是.

I’m not sure whether the methods which hasn’t been yet called are allocated differently in memory for each object or not?

JVM经历了许多优化阶段,当您调用方法时,它可能会优化它,内联它甚至消除它.您可以通过在命令行上添加-XX:PrintCompilation来查看正在编译(甚至重新优化)的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读