黑马JVM总结(八)

2023-09-14 23:19:59

(1)StringTable面试题

1.8 

1.6时

(2)StringTable的位置

jvm1.6时StringTable是常量池的一部分,它随着常量池存储在永久代当中,在1.7、1.8中从永久代变成了堆中,为什么做这个更改呢?因为永久代的内存效率很低,永久代是在Full  GC的时候才会触发永久代的垃圾回收,Full  GC只有等到老年代的空间不足时才会触发,触发的时机比较晚导致StringTable的回收效率不高

StringTable用的非常的频繁它里面存储的都是字符串常量,我们java程序中字符串常量对象都会分配到StringTable中,它的回收效率不高会占用大量的内存,它的效率不高,会产生永久代的内存不足,基于这个缺点,把它转到堆里面,在堆里面只需要Minor GC就可以触发垃圾回收,一些常量池中的用不到的字符串对相关就可以垃圾回收,大大减轻了字符串对内存的占用 

下面用例子证明一下StringTable串池的位置:我们把字符串放到集合中不让它回收

上面没有触发内存不足,是因为循环次数不足以触发,我们在1.6的情况下吧永久代的内存设置小一些,就会暴露内存不足的现象

报的是永久代内存溢出 

切换到1.8环境下:设置最大参数

 报这个GC overhead....  这个是jvm垃圾回收的规则是由虚拟机参数控制的:

有个虚拟机参数

可以 关闭这个参数:

再次运行堆内存空间不足

通过以上就可以证明StringTable1.8用的是空间,1.6用的是永久代

(3)String_Table的垃圾回收

StringTable也会受到垃圾回收的管理的,当内存空间不足时StringTable中哪些没有被引用的字符串常量也会被垃圾回收

-Xmx10m:设置虚拟机堆内存的最大值

-XX:+:PrintStringStatistics打印字符串表的统计信息,通过它我们就可以看到串池中的字符串个数,及大小信息

-XX:+PrintGCDetails -verbose:gc 打印垃圾回收的信息把垃圾回收的次数啊时间啊显示出来

 堆内存占用,垃圾回收信息

 符号表:类的字节码里类名、方法名、变量名

StringTable的统计信息

StringTable的底层类似我们的HashTable的实现:数组+列表

数组的个数称为桶:

StringTable是以哈希表的方式存储数据的通的个数叫做buckets

存储的字符串对象:entries个数

字符串常量个数:literals

上面的代码我们什么都没有做,但是有数据,java程序在运行时类名,方法名,这些数据也是以字符串常量的形式表示的他们也存在串池中已经有那么多字符串对象了

 我们写入代码:加入串池,观看前后串池的字符串常量个数变化

变为1854 ,此时没有触发垃圾回收,我们可以进行修改加入串池的个数

修改为存入串池为10000个:当10兆的堆内存可能存不下,会触发垃圾回收,我们可以看到存入串池的字符串个数,并没有全部存入7226

为什么只存入七千多呢,因为触发了垃圾回收

通过以上案例我们可以得出StringTable也是可以发生垃圾回收的

 

更多推荐

API网关是如何提升API接口安全管控能力的

API安全的重要性近几年,越来越多的企业开始数字化转型之路。数字化转型的核心是将企业的服务、资产和能力打包成服务(服务的形式通常为API,API又称接口,下文中提到的API和接口意思相同),从而让资源之间形成更强的连接和互动关系,释放原有资产的价值,提升企业的服务能力。企业数字化转型使得基于API的业务系统剧增,随之而

RK3568笔记分享之“如何挂载SPI FRAM铁电存储芯片”——飞凌嵌入式

对于做快速存储采集数据类产品的用户来说,在处理突发掉电情况时需要保存现有数据并避免数据丢失,这种情况下有很多种解决方案,铁电存储器(FRAM)就是个很好的选择。FRAM是一种具有快速写入速度的非易失性存储器,既可以进行非易失性数据存储,又可以像RAM一样操作。本文将借助飞凌嵌入式OK3568-C开发板来为大家介绍一种采

周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来,周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用,通过AI智能检测与视频智能分析技术,现代化的周界安防系统可以做到全天候快速、准确地发现入侵等异常事件,并及时报警遏制。今天我们来介绍下旭帆科技安全生产周界警戒AI算法的具

[2023.09.18]: Rust中类型转换在错误处理中的应用解析

随着项目的进展,关于Rust的故事又翻开了新的一页,今天来到了服务器端的开发场景,发现错误处理中的错误类型转换有必要分享一下。Rust抽象出来了Result<T,E>,T是返回值的类型,E是错误类型。只要函数的返回值的类型被定义为Resut<T,E>,那么作为开发人员就有责任来处理调用这个函数可能发生的错误。通过Res

CIIS 2023丨聚焦文档图像处理前沿领域,合合信息AI助力图像处理与内容安全保障

近日,2023第十二届中国智能产业高峰论坛(CIIS2023)在江西南昌顺利举行。大会由中国人工智能学会、江西省科学技术厅、南昌市人民政府主办,南昌市科学技术局、中国工程科技发展战略江西研究院承办。本次大会重点关注AI大模型、生成式AI、无人系统、智能制造、数字安全等领域,汇集了来自中国工程院、国际欧亚科学院、国际核能

聚观早报|高德发布安全出行大模型;小鹏G9焕新上市

【聚观365】9月21日消息高德发布安全出行大模型小鹏G9焕新上市妙鸭相机上线免费版RedmiNote13Pro+支持IP68Neuralink将进行首次人体临床试验高德发布安全出行大模型高德发布了安全出行大模型。据介绍,安全出行大模型基于高德的地图大数据、位置大数据、导航大数据、智能决策系统等能力,从风险识别、风险预

悬崖边:企业如何应对网络安全漏洞趋势

在本文中,我们将讨论企业在处理漏洞时面临的挑战,解释安全漏洞是如何引发网络攻击的,以及为什么它会导致不可接受的事件。我们还将分享我们在识别趋势性漏洞方面的经验。现代信息安全方法正在成为企业的工作流程。例如,不久前,整个IT行业都在向容器化发展,而对云环境的安全和保护机制的研究还是个新鲜事物。现在,几乎每家公司在产品架构

研究报告:周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来,周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用,通过AI智能检测与视频智能分析技术,现代化的周界安防系统可以做到全天候快速、准确地发现入侵等异常事件,并及时报警遏制。今天我们来介绍下旭帆科技安全生产周界警戒AI算法的具

Qt使用I.MX6U开发板上的按键(原理:将电脑键盘方向键↓在Qt中的枚举值与开发板中按键定义的枚举值一致,这样电脑端测试效果就与开发板的一致)

在上篇介绍了Qt点亮I.MX6U开发板的一个LED,对于Qt控制I.MX6U开发板的一个蜂鸣器原理也是一样的,就不做详细介绍,具体可参考Qt控制I.MX6U开发板的一个蜂鸣器,本篇介绍Qt使用I.MX6U开发板上的按键的相关内容。文章目录1.开发板硬件图及板卡按键在电脑键盘中的对应原理2.出厂内核设备树中注册的按键3.

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(一)

目录前言总体设计系统整体结构图系统流程图运行环境Python环境TensorFlow环境方法一方法二后端服务器Django环境配置微信小程序环境相关其它博客工程源代码下载其它资料下载前言本项目专注于MovieLens数据集,并采用TensorFlow中的2D文本卷积网络模型。它结合了协同过滤算法来计算电影之间的余弦相似

人工智能安全-5-网络入侵检测

0提纲概述数据集数据预处理特征工程天池AI上的实践棘手问题1概述入侵检测是网络安全中的经典问题,入侵是指攻击者违反系统安全策略,试图破坏计算资源的完整性、机密性或可用性的任何行为。不管是哪种类型的入侵检测系统(IDS),其工作过程大体是相同的,可以分为三个主要的环节,即信息收集、分类检测和决策,其中,分类检测和决策环节

热文推荐