Java内存区域——方法区

 

存储虚拟机加载的类信息,那么,这个类信息就有哪些信息呢?这里的类信息其实非常多,比如,类的版本,字段,方法,接口,这些描述信息都是属于类的信息我们所执行的方法其实就会放到方法区中,除了类的信息之外,就是常量静态变量即时编译器编译后的代码等数据。这是我们方法区所存储的一些信息

方法区永久代,其实对于我们现在主流的虚拟机,就是我们最熟悉的hosport,那么在hosport上进行开发部署,很多人都愿意把方法区称之为永久代,为什么呢?因为hosport虚拟机的设计团队把gc分代,收集扩展到了方法区中,也就是说,使用永久代来实现了方法区,那么,这样有什么好处呢?其实就是hosport虚拟机的垃圾收集器可以像管理Java堆一样管理这部分内存,就能够省去专门为方法区编写内存管理代码的工作,其实这两者并不等价,仅仅是对于hsport虚拟机来讲,那么,对于其他的虚拟机,并不存在永久代的概念

对于永久代的说法,虚拟机的规范中并没有做详细的介绍,并没有做详细的规范,但是从目前来看,用方法区来实现永久代,并不是一个好的途径。其实我们只要知道方法区和永久代这两者在Java虚拟机规范中并不等价就可以了只是在hosport虚拟机中,为了减少内存管理代码的工作,它省去了专门对这个方法区的编码。

垃圾回收在方法区的行为,关于垃圾回收,我们会在后边的内容中讲解,这里就简单的提一下,就是说,我们知道垃圾回收最主要的区域是在Java堆中,方法区也算是堆的一个逻辑部分,但是,垃圾回收在方法区中出现的还是比较少的,主要是因为它回收的效率比较低,费的成本比较高,所以,一般很少会在这里进行垃圾回收,但是,也会在这里进行垃圾回收,比如说,针对常量池的回收,包括对象类型的卸载等等。

异常的定义,就是说,当我们在申请那个内存区域,申请失败的情况下,同样会抛出一个异常,叫做OutOfMemoryError。

猜你喜欢

转载自blog.csdn.net/G_66_hero/article/details/84198602