当前位置: 代码迷 >> J2SE >> 生手想问一些关于内存的概念
  详细解决方案

生手想问一些关于内存的概念

热度:85   发布时间:2016-04-23 19:38:13.0
新手想问一些关于内存的概念
网上看见说类信息是加载在方法区的,那类信息里面的静态成员,非静态成员,还有静态,非静态方法之类的也是打包一样的存在类内部吗,还是分开在不同区域(貌似方法区也分很多区域的吧),还有一个问题是看见说类也是对象,可类是对象的话不是应该在堆里面吗,怎么会在方法区,搞不懂了好晕啊
------解决思路----------------------
首先说明一下内存:java内存大致分为三大块(不同的虚拟机实现不同,因此并不能严格就这么说,但是jvm是有概念规范的,因此我们只说概念规范)。
1、方法区:这个区域存放的是类信息,方法信息,静态成员变量信息。
2、对象堆内存:这个区域存放所有实例化的对象,包括对象的非静态成员变量。
3、执行引擎栈内存:这个区域是存放执行线程的信息和局部变量信息以及指令指针(执行的代码)。
另外说明:方法都是在方法区的,无论是否静态,这点必须清楚。
在讨论一下你的第二个疑问,就是你说的类也是对象的问题,从概念上来说,这是正确的,面向对象语言的设计初衷就是万事万物皆对象的理解方式,类也不例外,不过对于具体实现,是需要有区分的,在编程语言语法中,类和对象就不能视为一回事了,必须严格吧类和对象的概念区分开来。不过对于万事万物皆对象的概念,java本身也有对其的实现,即是使用CLASS类的对象来表示类也为一个对象,从具体实现上来说,虚拟机每加载一个类进入到JVM中,即会为其创建一个对应的CLASS类对象来影射这个类,类信息还是存放在方法区,但是这个影射对象是在堆中的。
  相关解决方案