java非固态运行速度,终于知道为什么SSD会越用越慢,解决方法来了!

2023-10-22 17:40

本文主要是介绍java非固态运行速度,终于知道为什么SSD会越用越慢,解决方法来了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

每当选购电脑时,你会发现,配置存储介绍总是不一样,要么纯固态(SSD),要么纯机械,要么固态+机械的组合硬盘。

两者的主要区别在于固态是半导体存储,机械则是电磁存储。固态硬盘最大读取速度在400-600MB/s,而机械硬盘的最大读取速度不超过200MB/s。

虽然SSD的速度比机械硬盘要快上许多,但是它有一个比较严重的问题,那就是用久之后,会明显感觉速度下降了。这到底是什么原因呢?

56bb1c2e6d10004644c5cf8226cf6ef0.png

什么是SSD?

首先,我们要先了解SSD的基本概念。固态硬盘指的是用固态电子存储芯片阵列而制成的硬盘。它由控制单元和存储单元组成。

目前,市面上的固态硬盘分为两大类,第一类是采用闪存(FLASH芯片)作为存储介质,第二类则是采用DRAM为存储介质。

基于闪存类的固态硬盘,也就是通常所说的SSD。这种硬盘的适用范围非常广泛,笔记本硬盘、U盘、存储卡等都属于SSD。

SSD主要由主控、闪存以及缓存构成。其中,闪存起到了关键性作用,因为它是负责存储数据的闪存颗粒,很大程度上决定了SSD的性能寿命。

6bf2fdad18f450a8d27624fd8549b84e.png

闪存是指一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。

目前闪存颗粒有四种类型,分别是SLC、MLC、TLC、QLC。SLC闪存的一个存储单元只能存储1bit数据,换句话说就是只能存储一个0或者一个1,一共两种状态。MLC闪存的一个存储单元可以存储2bit数据,0和1可以排列组合,拥有00、01、10、11四种状态。以此类推,QLC是最新的闪存颗粒,它的存储容量是SLC的8倍,0和1可以组成16种状态。

4169a5153984e2a1c7bc4082d4b635cf.png

虽然SSD的闪存容量在不断增加,但是擦除和写入次数却减少了。这也就意味着,SSD的使用寿命缩短了。与QLC相比,SLC的使用寿命是它的100倍。

d316464413d80123fb570fd3e66b20bc.png

除闪存外,SSD的接口也分为四类,它们是SATA、mSATA、M.2和PCI-E。

SATA是一种电脑总线,分别有SATA 1.5Gbit/s、SATA 3Gbit/s和SATA 6Gbit/s三种规格,读写速度依次为150MB/s、300MB/s、600MB/s,适用于几乎所有台式机和笔记本。

mSATA是迷你版本SATA接口,拥有M50 msata和M30 msata两种规格,读写速度均为520MB/s,主要适用于超极本,比如联想的E220s、E420s、Y460等。

M.2是Intel推出的一种替代mSATA新的接口规范,它有两种类型:Socket 2和Socket 3。Socket 2最大的读取速度可以达到700MB/s,而Socket 3的理论带宽可达4GB/s。Socket 2适用于部分中低端笔记本,Socket 3几乎适用于新上市的台式主板和中高端笔记本。

PCI—E是一种高速串行计算机总线,它有5个版本,从1.0到最新的5.0,读写速度分别为250MB/s、500MB/s、984.6MB/s、1969MB/s以及3938MB/s,适用于几乎所有的台式机。

baa6bcac2f09ea75f97e4f527665ff9a.png

综合来看,SSD闪存颗粒的不同,它的读写速度和擦除次数也就不同,容量越大的闪存,使用寿命就越有限;SSD接口的不同,直接应影响的是读写速度。

写入放大和垃圾回收

不过,以上两种原因影响的是SSD使用前的速度,使用后速度下降的原因主要分为两个方面:写入放大(WA)和垃圾回收(GC)。

WA是闪存和SSD中的一种不良现象,即实际写入的物理数据量是写入数据量的多倍。由于FLASH芯片需要先擦除再改写的特性,它需要将目标数据所在的文稿整个读出来缓冲到缓存器中,然后再将你要改写的数据覆盖到缓存器,最后将缓存器写入到另一个文稿中,所以,哪怕你更新一个字节,实际上写入了4KB的数据到FLASH芯片。这也就造成了SSD写入文件大小翻倍的现象,从而导致硬盘容量越来越小,写入速度下降。

36549b3a4c5577893fd9ea286c0a5dc7.png

GC是当FLASH芯片中再也找不到可以直接写入的空白文稿时,JVW(java虚拟机)将调用垃圾回收机制来回收内存空间。GC会在FLASH芯片中查找废弃或删除的文稿,然后将这个文稿擦掉,用来存放你的新数据,但由于GC与FLASH的擦写单位不一致,写入时是按照文稿进行的,而擦除则是按照Block文件类型,一个Block中有16个文稿,所以当GC找到一个废弃文稿时,实际上改文稿需要先把Blovk中的其余15个文件搬到别的地方。因此每当你更新1字节,实际在后台有16个文稿写入,一个文稿大小为4KB,16个文稿就是64KB,这样SSD的容量也会成倍减少,最终导致写入速度下降。

e909296d1d42ecf101d3240b8613a00f.png

简单点来说,当你的SSD存储数据变多时,空白的文稿会随之变少,为了腾出额外的空间,GC会寻找废弃的文稿,随着次数的增加,SSD的速度自然也就慢了。

另外,GC并不是需要写入数据时才出动,即使SSD处于空闲状态,它也会悄悄地进行操作,提前预留一些空间。

那如何避免SSD因存储数据过多导致速度下降的问题?

厂商的做法是根据SSD等级来制定不同的解决方案,比如:入门级SSD通过缩小可用容量,预留出一部分空间,以此来防止SSD完全写满。最为直观的例子就是有些电脑明明写着512GB的存储容量,实际能用的就只有480GB。

对于中高端的SSD,它们会额外搭载缓存降低写入放大。像三星970 PRO NVMe M.2 1T就配备了4GB的缓存容量。

75acc38b52d4d434c097630654934c84.png

用户可以通过4K对齐、Trim命令、磨损均衡等功能机制来降低写入放大。

实测:SSD爆容量对速度的影响

为了进一步确认SSD容量满后是否真的影响速度,我们进行了测试。

测试前,MacBook Air(2018款)的SSD剩余容量为71.58GB,使用Disk Speed Test测出硬盘的写入速度为492.1MB/s,读取速度为1832MB/s。

f42688ae69abb107271057f898e0b984.png

接下来,我们要将电脑的可用容量变小,预留9.02GB的空间,然后再测一次SSD的速度。此时,SSD的写入速度变成了448.2MB/s,读取速度为1791MB/s。

与前一组数据进行对比你会发现,SSD随着可用容量的减小,写入速度和读取速度都有所下降。

7c8979a9fdf94b420af150b2381d2e8f.png

PC端测完之后,我们再来看下移动端。MoFirLee手上有一部容量为64GB的iPhone 11,硬盘的剩余容量为27.2GB,使用DiskBench测得的硬盘写入速度为201.7MB/s、142.1MB/s、135.2MB/s,平均写入速度159.7MB/s,读取速度为360.6MB/s、485.9MB/s、387.1MB/s,平均读取速度411.2MB/s。

7035aa20bae0382a4af8d9077142aec7.png

手机硬盘可用容量变为1.17GB后,写入速度为183.7MB/s、159.6MB/s、195.5MB/s,平均写入速度160.6MB/s,读取速度为609.7MB/s、610.3MB/s、510.6MB/s,平均读取速度510.7MB/s。

相比上组数据,第一次的硬盘写入速度确实有所下降,但第二、三次的数据要比上一组快,三次的读取速度都比上组快。出现这种情况的原因可能是主控的算法和优化,所以测得的数据有所差异。

10038d7a86477ce2871a755b586fae5d.png

最终的得出的结论是当SSD可用容量变小后,写入和读取速度都会有所下降,但实际上主控对这些可能还有其他优化或者控制措施,以及有不同的算法,导致差异。

小结

如今可以用8个字来形容SSD的处境,有一种倒退叫进步。目前市面上的SSD,制程工艺越先进,寿命反而缩短,以此换来了更快的速度。从侧边可以看出,厂商们在现有技术无法突破的情况下,选择了牺牲一些东西。

使用前,影响SSD速度的因素有闪存颗粒、接口类型、主控的好坏以及升级固件。使用后,写入放大、垃圾回收机制和不良的存储习惯是影响SSD速度的主要原因。虽然好的SSD速度很快,但是使用寿命会下降,价格也会偏高。便宜的SSD速度一般,使用寿命却很长。至于怎么选,完全看个人需求。

为了避免SSD因可用容量不足,导致速度下降这一问题,最好将每个硬盘的资料全部备份起来,然后再做一个4K对齐。如果你是刚买的电脑,硬盘类型是固体的话,可以在使用前,将SSD进行高级格式化。这样一来,你的SSD速度就不会那么容易下降了。

这篇关于java非固态运行速度,终于知道为什么SSD会越用越慢,解决方法来了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262751

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听