返回顶部
首页 > 资讯 > 精选 >Java中为什么会占用高资源
  • 190
分享到

Java中为什么会占用高资源

2023-06-17 04:06:24 190人浏览 安东尼
摘要

这篇文章主要介绍“Java中为什么会占用高资源”,在日常操作中,相信很多人在Java中为什么会占用高资源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中为什么会占用高资源”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“Java中为什么会占用高资源”,在日常操作中,相信很多人在Java中为什么会占用高资源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中为什么会占用高资源”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它。所以在我们拼接字符串的时候,创建了一个新的字符串,旧的被垃圾回收器所标记。

Java中为什么会占用高资源

如果我们处理上百万的字符串,然后,我们就会生成百万的额外字符串被垃圾回收器处理。

虚拟机底层在拼接字符串时执行了众多操作。拼接字符串最直接的点操作(dot operator)就是String#concat(String)操作。

public String concat(String str) {     int otherLen = str.length();     if (otherLen == 0) {         return this;     }     int len = value.length;     char buf[] = Arrays.copyOf(value, len + otherLen);     str.getChars(buf, len);     return new String(buf, true); }  public static char[] copyOf(char[] original, int newLength) {     char[] copy = new char[newLength];     System.arraycopy(original, 0, copy, 0,                      Math.min(original.length, newLength));     return copy; }  void getChars(char dst[], int dstBegin) {     System.arraycopy(value, 0, dst, dstBegin, value.length); }

你可以看到一个字符数组被创建,长度则是已有字符和拼接的字符长度之和。然后,它们的值复制到新的字符数组中。***,用这个字符数组创建一个String对象并返回。

所以这些操作繁多,如果你计算一下,会发现是O(n^2)的复杂度。

为了解决这个问题,我们使用StringBuilder类。它就像可变的String类。拼接方法帮助我们避免不必要的复制。它拥有O(n)的复杂度,远远优于O(n^2)。

然而Java 8默认使用StringBuilder拼接字符串。

Java 8的文档说明:

为了提高字字符串拼接的性能,Java编译器可以使用StringBuffer类或类似技术,在使用求值表达式时,减少中间String对象的创建。

Java编译器处理这种情况:

public class StrinGConcatenateDemo {   public static void main(String[] args) {      String str = "Hello "; str += "world";    } }

上面的代码会被编译成如下字节码:

public class StringConcatenateDemo {   public StringConcatenateDemo();     Code:        0: aload_0        1: invokespecial #1                  // Method java/lang/Object."<init>":()V        4: return   public static void main(java.lang.String[]);     Code:        0: ldc           #2                  // String Hello        2: astore_1        3: new           #3                  // class java/lang/StringBuilder        6: dup        7: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V       10: aload_1       11: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;       14: ldc           #6                  // String world       16: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;       19: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;       22: astore_1       23: return }

你可以在这些字节码中看到,使用了StringBuilder。所以我们在Java 8中不再需要使用StringBuilder类。

到此,关于“Java中为什么会占用高资源”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java中为什么会占用高资源

本文链接: https://lsjlt.com/news/287126.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中为什么会占用高资源
    这篇文章主要介绍“Java中为什么会占用高资源”,在日常操作中,相信很多人在Java中为什么会占用高资源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中为什么会占用高资源”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • CPU资源占用过高问题解决
    内容摘要:CPU使用率高达100%。碰到这种情况,一般初学者都会选择重装系统来解决,然而其方法效果很好,但是它存在很多缺陷,如重装系统后,原来的系统设置必须重新设置,常用软件也得重新安装,非常麻烦。其实我们完全可以不重装...
    99+
    2023-05-23
    解决 问题 占用 资源 系统 软件 运行 程序
  • win11资源管理器占用高如何解决
    如果Windows 11的资源管理器(即文件资源管理器)占用过高,可以尝试以下几种方法来解决:1. 重启资源管理器:打开任务管理器(...
    99+
    2023-08-22
    win11
  • windows Microsoft compatibility telemetry占用资源高如何解决
    今天小编给大家分享一下windows Microsoft compatibility telemetry占用资源高如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这...
    99+
    2023-07-01
  • windows资源管理器占用CPU过高怎么解决
    这篇文章主要介绍了windows资源管理器占用CPU过高怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows资源管理器占用CPU过高怎么解决文章都会有所收获,下面我们一起来看看吧。资源管理器占用...
    99+
    2023-07-01
  • linux怎么查看资源占用率
    要查看Linux系统的资源占用率,可以使用以下命令:1. 使用top命令:在终端中输入top命令,会显示系统的实时资源占用情况,包括...
    99+
    2023-10-20
    linux
  • win11资源管理器占用过高如何解决
    本文小编为大家详细介绍“win11资源管理器占用过高如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“win11资源管理器占用过高如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法一: 其实不仅是资...
    99+
    2023-07-01
  • 怎么查看ubuntu系统资源占用
    这篇文章主要讲解了“怎么查看ubuntu系统资源占用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么查看ubuntu系统资源占用”吧!查看ubuntu的资源占用的命令为$: toptop命...
    99+
    2023-06-13
  • 怎么在电脑中查看资源占用情况
    这篇文章将为大家详细讲解有关怎么在电脑中查看资源占用情况,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法/步骤:右键任务栏空白处并启动任务管理器,随后切换到进程选项。在图中就可以看到进程占用情况,或者可...
    99+
    2023-06-27
  • 为什么在Java中使用NPM打包会更加高效?
    在Java开发中,我们常常需要使用各种第三方库来实现我们的功能。而这些第三方库通常是以jar包的形式提供给我们的。但是,随着前端技术的发展,越来越多的Java项目需要依赖于前端的资源,如CSS、JavaScript等。在这种情况下,我们通...
    99+
    2023-07-30
    npm leetcode 打包
  • 无需备案虚拟主机为什么会出现cpu占用率高
    无需备案虚拟主机出现cpu占用率高的原因有:1、CPU硬件问题,如CPU温度过高、硬件配置不合理、CPU核心频率不足、硬件驱动程序未...
    99+
    2023-02-08
    无需备案虚拟主机 虚拟主机
  • windows资源管理器占用内存过高如何解决
    若Windows资源管理器占用内存过高,可以尝试以下几种解决方法:1. 重启资源管理器:打开任务管理器(按下Ctrl + Shift...
    99+
    2023-10-08
    windows
  • 解决Win10 9860 CPU占用资源居高不下的办法
    原先是最初的预览版经过升级为WMC版,发现不能接受9860更新,于是用9860的iso恢复升级安装,结果是9860的WMC版...然后干脆全新安装,一番折腾上了9860的船。 这两个版本都有一个通病就是:CPU在没有人为...
    99+
    2023-06-08
    Win10 build9860 办法 资源 9860 CPU
  • CentOS进程资源占用高原因分析及命令详解
    这篇文章主要介绍“CentOS进程资源占用高原因分析及命令详解”,在日常操作中,相信很多人在CentOS进程资源占用高原因分析及命令详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CentOS进程资源占用高...
    99+
    2023-06-10
  • 怎么避免ASP.NET缓存占用系统资源
    这篇文章主要介绍“怎么避免ASP.NET缓存占用系统资源”,在日常操作中,相信很多人在怎么避免ASP.NET缓存占用系统资源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么避免ASP.NET缓存占用系统资源...
    99+
    2023-06-18
  • 云服务器vps为什么会出现CPU占用100%
    云服务器vps出现CPU占用100%的原因有:1、硬件配置太低,稳定性不好,导致CPU占用100%;2,网站被黑客植入挖矿病毒或恶意脚本 ,导致CPU占用100%;3、CMS后台相对比较成熟导致服务器资源的占用越来越大,从而使vps云服务器...
    99+
    2024-04-02
  • 怎么查看Linux下系统资源占用情况
    本篇内容主要讲解“怎么查看Linux下系统资源占用情况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么查看Linux下系统资源占用情况”吧!CPU的信息。当有...
    99+
    2024-04-02
  • springboot访问静态资源会遇到什么问题
    这篇文章主要介绍了springboot访问静态资源会遇到什么问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。访问静态资源遇到的坑及解决开始是以这种结构进行的,结果页面上一篇...
    99+
    2023-06-29
  • Vmmem进程(WSL)占用CPU或内存资源过高的解决办法
    背景:         有没有一瞬间,在开启docker或打开虚拟机时,内存瞬间飚增,进行查看进程消耗是一个Vmmem的进程在作祟,那么Vmmem是什么呢,又如何进行限制呢! 什么是Vmmem:         Vmmem:是一个系统合成的...
    99+
    2023-09-16
    java 运维 开发语言
  • Java中怎么读取WEB应用中的资源
    今天就跟大家聊聊有关Java中怎么读取WEB应用中的资源,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。问题:前几天,碰到了需要从web应用读取文件内容的问题。一般的,配置文件都放在工...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作