深入理解JVM(四)

简介: 深入理解JVM(四)

堆:

是什么?

   是java内存区域中一块用来存放java对象实例的区域,几乎所有的数组和对象实例都在这里分配内存。

为什么?

   此内存区域的唯一目的就是存放对象实例[数组和对象]

   java堆(java Heap)是java虚拟机所管理的内存中最大的一块java堆是被所有线程共享的一块内存区域.

特点?

   java堆是垃圾收集器管理的主要区域,因此被很多时候也被称之为 "GC"堆

   -Xms -Xms

   java堆可以分成新生代和老年代,新圣地啊可以分成To Space, From Space, Eden


方法区:

     是什么?

         是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据

          类信息:类的版本号,方法,接口等等数据,是存在class文件里面的

下面是class文件,编译成字节码文件

     为什么?

           内存中存放类信息,静态变量等数据,属于线程共享的一块区域

            Hotspot使用永久代来实现放法区, JRockit、IBM、J9VM这些厂商是没有永久代概念的 ,HotSpot是为了更好的管理内存,为了像java堆那样管理内存,所以把永久代放到方法区里面,为了通过垃圾回收器来管理这部分的内存,多次对象还没有被回收的时候就可以放到永久代里面。

 有人把永久带和方法区混在一起,其实在HotSpot里面用永久代来实现方法区的

      特点?

             并非数据进入了方法区就如永久代的名字一样”永久“存在了,而是相对永久这区域的内存回收目标主要是针对常量池的回收和对类型的卸载,只是部分永久。

             当方法区无法满足内存分配的时候就会抛出OutoMemoryError,当Class文件非常大的时候就会报这个异常,方法区没有像java堆分配的内存那么多

JVM内存模型之方法区运行时常量池

是什么?

     运行时常量池是方法区的一部分,Class文件除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中的存放。

运行时常量池的模拟

特点:StringTable来维护的:HashSet的数据结构

   运行时常量池时方法区的一部分,受到方法区内存的限制,当常量池再申请到内存时会抛出OutOfMemoryError异常。

相关文章
|
4月前
|
Java
jvm
jvm就是我们常说的java虚拟机,他是整个java实现跨平台的最核心 的部分,所有的java程序会首先被编译为.class的类文件,这种类文 件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统 相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释 给本地系统执行。 只有jvm还不能成class的执行,因为再解释class的时候jvm需要调用 解释所需要的类库lib,而jre包含lib类库。jvm屏蔽了与具体操作系 统平台相关的信息,使得java程序只需生成在java虚拟机上运行的目 标代码(字节码)就可以在多种平台上不加修改地运行。
32 1
|
2天前
|
存储 Java Unix
深入理解JVM(三)
深入理解JVM(三)
|
3月前
|
存储 算法 Java
JVM的简单介绍
JVM的简单介绍
27 1
|
10月前
|
Java
JVM
JVM
68 0
|
4月前
|
存储 算法 Java
|
4月前
|
算法 Java Linux
深入理解JVM - Shenadoah
深入理解JVM - Shenadoah
74 1
|
4月前
|
存储 安全 前端开发
|
存储 安全 算法
jvm的组成
jvm的组成
73 0
|
Java Linux Go
必知必会JVM一-什么是JVM?
必知必会JVM一-什么是JVM?
115 0
|
存储 自然语言处理 算法
JVM详解
jvm串讲,可收藏用于复习
1421 6
JVM详解