黑马JVM总结(九)

news2024/9/21 4:32:58

(1)StringTable_调优1

我们知道StringTable底层是一个哈希表,哈希表的性能是跟它的大小相关的,如果哈希表这个桶的个数比较多,元素相对分散,哈希碰撞的几率就会减少,查找的速度较快,反之桶的个数较少,碰撞的几率增高,导致我的链表较长,查找的效率受到影响

调优呢主要是调整HashTable桶的个数:

时间还是挺快的0.4秒 

 

提前设置了参数-XX:StringTableSize=200000

StaringTable的统计信息 桶个数调整到20000w,48w个单词平均分散到20w桶里面平均每个桶2个

单词,读取的效率较快的

如果去掉参数:时间会变长,默认桶大小6w个

调的更小一些:

再次运行时间变得更慢:达到12秒:因为他往StringTabel里面放一个字符串,它就要去哈希表里面查看有没有这个字符串,有的话不放

如果你的系统里你的字符串常量的个数非常的多,可以适当的把StringTable桶的个数调大,这样呢它会有一个更好的哈希分布,减少哈希冲突,让我们的StringTable串池的效率得到明显的提升

 

(2)StringTable_调优2

我们为什么要用StringTable呢?什么情况下用到呢?

比如说一个社交网站,他要存储大量的用户信息,用户的地址信息,用户量非常大,用户 的地址呢用字符串表示的,比如说需要用到30G的内存才能存下这些地址信息,但是用户的地址很多都是重复的,重复的地址都存入内存,占用的内存上限了30G,用这个解决方法,字符串的intern方法,这样呢可以取出重复的地址,相同的地址呢,intern之后呢在串池中只会存储一份,这样呢就可以减少字符串对内存的占用

我们演示用大量的字符串对象被创建,入池与不入池,前后对内存的占用情况

先不如池:

打开JVisualVM,他可以查看内存的占用情况

读取文件之前:字符串的内存不太多1兆左右    char数组呢字符串对象也会大量的引用char数组表示的

然后去控制台回车:

读取之后,再观看数组的占用情况:发现内存急剧增加达到差不多300兆

 修改代码加入串池:加入串池后返回加入串池的对象,串池外没有加入的就会被垃圾回收

运行完之后,他们的才占30%不到40兆

跟上面的差距还是很明显的,通过入池,字符串占用内存明显减少

如果你的系统里有大量的字符串,这些字符串可能存在重复的问题,那么我们可以把字符串入池,来减少字符串的个数

(3)直接内存

直接内存并不属于java虚拟机的内存,而是属于系统内存,是操作系统的内存

直接内存,用于NIO数据读写时的缓冲区内存,NIO有一个叫ByteBuffer所使用的内存就是直接内存

属于操作系统内存分配回收成本较高但是读写性能高

ByteBuffer用的时间少,在读写大文件的时候性能高呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java异常处理(详解)

Java异常处理 前言一、异常与异常类1.异常的概念2.异常类Error类Exception类(1)非检查异常(2)检查异常 二、异常处理1.异常的抛出与捕获2.try-catch-finally语句3.声明方法抛出异常3.用throw 语句抛出异常 三、自定义异常类 前言 …

Springboot微服务项目整合skywalking链路追踪框架

skywalking官网网址:Apache SkyWalking 目录 1、安装skywalking 2、微服务接入skywalking 3、skywalking数据持久化 1、安装skywalking 下载skywalking,本篇文章使用的skywalking版本是8.5.0 Index of /dist/skywalkinghttps://archive.apache.org/…

JL653—一个基于ARINC653的应用程序仿真调试工具

JL653是安装在PC机Windows操作系统上面的一层接插件,它能够真实地模拟ARINC653标准规定的功能性行为,从而可以供研发人员在PC机Windows环境下高效、快速的进行基于ARINC653的应用程序的开发、调试等。 JL653提供了ARINC 653 Part 1中要求的以下服务&…

每日刷题-6

目录 一、选择题 二、算法题 1.Fibonacci数列 2.合法括号序列判断 一、选择题 1、 解析:内联函数是一种可以提高函数执行效率的方法,它的原理是编译时在函数调用点直接展开函数体的代码,从而避免了函数调用的开销。 但是,内联函…

发布文章到wordpress

给朋友新建的wp网站,没有内容怎么办,总不能一篇篇的挨个写入吧。用wp提供的录入模块就可以了 参考 wp说明文档 获取docx内容保存到wp 资料有个docx文件,但文件格式混乱,好在有目录,可以基于目录,对文章分割,用正则拆分存入wp 首先用pandoc把docx转为md文件,速度较慢,…

EDA(Exploratory Data Analysis)探索性数据分析

EDA(Exploratory Data Analysis)中文名称为探索性数据分析,是为了在特征工程或模型开发之前对数据有个基本的了解。数据类型通常分为两类:连续类型和离散类型,特征类型不同,我们探索的内容也不同。 1. 特征类型 1.1 连续型特征 …

C语言——数据在内存中的存储_学习笔记

引言 在C语言——二进制/移位操作符/位操作符_学习笔记一文中有提到,数据在内存中是以二进制的形式存储的,也就是0和1; 而整数的二进制表示方法有三种,原码、反码和补码,文中也有所提及 而关于浮点数,浮点数…

在PHP8中向数组添加元素-PHP8知识详解

在php8中向数组添加元素有多种方法,在这里主要讲解几个常用的方法:使用方括号[]添加元素、使用array_unshift()函数,向数组的头部添加元素、使用array_push()函数,向数组的尾部添加元素、使用array_splice()函数添加元素。 1、使用…

【C++】类和对象(中下)

前言: 上一篇文章,我们了解了类的默认成员函数——构造函数、析构函数、拷贝构造函数,这篇我们让我们接着了解。 一、赋值运算符重载: 1.运算符重载: C为了增强代码的可读性引入了运算符重载,运算符重载是…

数据科学的文本技术 Text Technology(IR信息检索、搜索引擎)

一、文章摘要 1. 内容 * Introduction to IR and text processing, system components * Zipf, Heaps, and other text laws * Pre-processing: tokenization, normalisation, stemming, stopping. * Indexing: inverted index, boolean and proximity search * Evaluation m…

测试进阶知识之零日攻击的发现和防御

零日攻击是指针对软件或系统中未公开(或未被开发者知晓)的漏洞进行的攻击。这些漏洞被称为零日漏洞,因为在被公开之前,它们对开发者或安全研究人员来说是未知的,所以没有足够的时间进行防御或修复。 发现零日漏洞 发…

数据集成:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

清华大学 邓俊辉数据结构 关于哈希表的章节

本来以为没有 但是搜索hash 发现被叫做散列表 所以在9.3节就可以找到了

Keepalived+LVS高可用集群

目录 一、keepalived介绍: 二、keepalived工具介绍: (1)管理 LVS 负载均衡软件: (2)支持故障自动切换: (3)实现 LVS 负载调度器、节点服务器的高可用性&…

HTML5教程之移动端Web页面布局

一、什么是移动端项目 顾名思义,运行在移动端的项目就称为移动端项目。那什么是移动端呢,主要是指我们的一些手持设备,最具有代表性的就是我们日常使用的手机和平板,当然还包括一些其他便携设备,如智能手表&#xff0c…

LVS keepalived实现高可用负载群集

目录 1 Keepalived及其工作原理 1.1 Keepalived体系主要模块及其作用: 2 LVSKeepalived 高可用群集部署 2.1 配置负载调度器(主、备相同) 2.1.1 配置keeplived(主、备DR 服务器上都要设置) 2.1.2 启动 ipvsadm 服…

重新认识交叉编译

1. 我以前对交叉编译的认知 引用正点原子的话来讲就是: 说得对,但是不全面,直到最近项目中遇到了一个例子我才重新认识什么是交叉编译。 2. build/host/target的概念 参考: Cross-Compilation (automake) 参考: Specifying Target Triplets (Autocon…

javaee之黑马乐优商城3

异步查询工具axios(儿所以时) vue官方推荐的ajax请求框架 新增品牌页面 如何找到上面这个页面 下面这个页面里面的新增商品弹窗 上面就是请求路径与请求方式 那么请求参数是什么? brand对象,外加商品分类的id数组cids (这里其实不止就是添加…

腾讯mini项目-【指标监控服务重构】2023-07-31

今日已办 trace_id传播 关于如何使用 trace_id 创建 span 的思路 【暂未实现 & 测试】 调研 SpanProcessor 阅读源码的test 明日待办 根据 trace_id 创建 span,应该需要 parent span_id 才能有 trace 的树状 span 的关系

腾讯mini项目-【指标监控服务重构】2023-08-06

今日已办 feature/client_traces_profile 修改 consumer 4个阶段的 spankind将 profile 的 span 作为 root span,保持与 venus 的 follows from 的 link feature/profile-otelclient-metric 将 metric 部分使用新分支 push go.opentelemetry.io/otel/propagatio…