深入理解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异常。

相关文章
|
机器学习/深度学习 数据采集 算法
探索机器学习中的线性回归
【10月更文挑战第25天】本文将深入浅出地介绍线性回归模型,一个在机器学习领域中广泛使用的预测工具。我们将从理论出发,逐步引入代码示例,展示如何利用Python和scikit-learn库实现一个简单的线性回归模型。文章不仅适合初学者理解线性回归的基础概念,同时也为有一定基础的读者提供实践指导。
|
存储 设计模式 测试技术
LabVIEW功能全局变量
LabVIEW功能全局变量
260 2
【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32
【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32
1332 0
|
编译器 Serverless C语言
【C语言进阶】字符串函数与内存函数的学习与模拟实现(上)
【C语言进阶】字符串函数与内存函数的学习与模拟实现(上)
|
存储 设计模式 JavaScript
告别Vuex,发挥compositionAPI的优势,打造Vue3专用的轻量级状态
告别Vuex,发挥compositionAPI的优势,打造Vue3专用的轻量级状态
183 0
告别Vuex,发挥compositionAPI的优势,打造Vue3专用的轻量级状态
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
591 213