java内存模型和jvm回收浅谈

首先java虚拟机规范将内存划分为如下几块:
1.栈区:该区域主要是存放方法临时变量、函数参数值等。由编译器自动分配释放,在具体方法结束之后由编译器自动释放。
2.静态取:部分永久存在于内存中,主要存放一些字符串常量、全局变量等。
3.堆区:该区域是分配给程序员控制的区域(其实也是由jvm统一控制),存放一些new的对象和数组,垃圾回收器会不定期查看该区域,然后通过回收机制进行垃圾回收。
4.代码区:存放二进制代码的区域,而且是多个对象共享的。

另外在《java虚拟机jvm高级特性与最佳实践》中则采取如下方法划分:

1.虚拟机栈:和上一样

2.堆区:和上面一样

3.程序计数器:主要是对编译过后的字节码行号指示器。主要是用来指向下一条需要执行的指令。

4.方法区:各线程共享,主要用来存放已被虚拟机加载过的类信息、常量、静态变量、即时编译后的代码。

                    在方法区下还单独提出一个 常量池

                    常量池中主要存放的是运行期产生的动态常量。这点和编译期产生的class常量池是有区别的。

5.本地方法区:通过native方式调用的本地方法所划分出来的区域,区别于方法区。

6.直接内存:这部分所使用的不是虚拟机划分出来的内存,而是使用的实际内存。也就是说是jvm指定内存之外的内存。jdk5的NIO通过DirectByteBuffer来分配的缓冲区,就是使用该类型的内存区域。

 

下面我们谈谈jvm的垃圾回收机制:
首先这部分可以肯定明确的是和堆区有莫大关系。
常用的判断对象废弃的算法:计数算法、根搜索算法。
常用的回收算法有:标记-清除算法、复制算法、标记整理算法、分代收集算法。
标记-清除算法:是最简单的算法也最容易实现。通过标记废弃对象,然后定时触发清除操作。整个过程分为标记、清除两个阶段。
复制算法:是将堆区划分成一个Eden区和两个Survivor区(一个是from 一个是to),其中Eden区较大、2块Survivor区较小。当触法回收时,将会将Eden和一个Survivor区(from)
中还存活的对象一次性copy到另一个Survivor区(to),然后将Eden和Survivor区(from)中的数据清理掉。另外复制算法会导致内存的浪费。如果Survivor区饱和,会通过担保机
制向老生带获取空间。最后一句可以忽略不计。涉及到新生代和老生代将在分代收集中详解。
标记-整理算法:将废弃对象的空出来的内存对齐,然后将多出来的废弃对象所在内存清理掉。该算法运用到老生代。
分代收集算法:分代收集是上面各种算法,根据实例对象在内存中存活特点,将内存区域划代处理。不容易被回收的实例对象经过一次垃圾回收后会移动到老生代的内存,容易被回
收的对象在新生代中暂时保存或者将废弃对象清除。首先在新生代采取“复制算法”,在老生代采取“标记-清理”和“标记-清除”算法。因为这部分数据失效概率小,采用这类方法更合
理高效。

总结:
jvm对于堆区的内存模型如下:

内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京深圳在总指数中名列前茅,分别以91.2684.53的得分领先,展现出强大的资金投入、创新能力基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业研究人员。 使用场景及目标:①了解低空经济的定义、分类发展驱动力;②掌握低空经济的主要应用场景市场规模预测;③评估各城市在低空经济发展中的表现潜力;④为政策制定、投资决策企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设域融合错位的重要性,提出了加强法律法规建设、人才储备基础设施建设等建议。低空经济正加速向网络化、智能化、规模化集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
数据集一个高质量的医学图像数据集,专门用于脑肿瘤的检测分类研究以下是关于这个数据集的详细介绍:该数据集包含5249张脑部MRI图像,分为训练集验证集。每张图像都标注了边界框(Bounding Boxes),并按照脑肿瘤的类型分为四个类别:胶质瘤(Glioma)、脑膜瘤(Meningioma)、无肿瘤(No Tumor)垂体瘤(Pituitary)。这些图像涵盖了不同的MRI扫描角度,包括矢状面、轴面冠状面,能够全面覆盖脑部解剖结构,为模型训练提供了丰富多样的数据基础。高质量标注:边界框是通过LabelImg工具手动标注的,标注过程严谨,确保了标注的准确性可靠性。多角度覆盖:图像从不同的MRI扫描角度拍摄,包括矢状面、轴面冠状面,能够全面覆盖脑部解剖结构。数据清洗与筛选:数据集在创建过程中经过了彻底的清洗,去除了噪声、错误标注质量不佳的图像,保证了数据的高质量。该数据集非常适合用于训练验证深度学习模型,以实现脑肿瘤的检测分类。它为开发医学图像处理中的计算机视觉应用提供了坚实的基础,能够帮助研究人员开发人员构建更准确、更可靠的脑肿瘤诊断系统。这个数据集为脑肿瘤检测分类的研究提供了宝贵的资源,能够帮助研究人员开发出更准确、更高效的诊断工具,从而为脑肿瘤患者的早期诊断治疗规划提供支持。
Java内存模型Java Memory Model,JMM)定义了Java程序在多线程环境下的内存访问规则。它规定了线程如何主内存、本地内存以及其他线程进行通信。 JVM内存模型是指Java虚拟机(Java Virtual Machine,JVM)在执行Java程序时的内存布局管理方式。JVM内存模型包括了堆内存、内存、方法、直接内存等。 在Java内存模型中,主要有以下几个概念: 1. 主内存:所有线程共享的内存域,包含了实例字段、静态字段以及数组元素。 2. 工作内存:每个线程独立的内存域,包含了该线程使用的变量副本或者缓存。 3. 内存间的交互操作:线程之间通过读写主内存来进行通信。 4. 原子性、可见性有序性:JMM保证了原子性(对基本类型的读写操作具有原子性)、可见性(一个线程对主内存的修改对其他线程是可见的)有序性(在一个线程中,按照程序顺序执行)。 JVM内存模型主要包括以下几个部分: 1. 堆内存:用于存储对象实例,由垃圾回收器进行管理。 2. 内存:用于存储方法的局部变量方法调用的信息。每个线程都有自己的内存。 3. 方法:用于存储类的信息、常量、静态变量等。 4. 直接内存:在堆外分配内存,不受JVM管理,由操作系统进行管理。 需要注意的是,JVM内存模型是具体实现的一种规范,可以根据不同的JVM厂商进行优化调整。而Java内存模型Java语言规范中定义的多线程内存访问规则,对于不同的JVM实现都是一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值