【使用者手册】手动改善IntelliJ IDEA和Scala插件性能

news2024/10/5 17:16:40

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。

在普通笔记本电脑上,成熟IDE是最复杂的一种应用程序。JetBrains官方团队收到有关 Scala 插件在某些情况下出现延迟或者总体上运行缓慢的反馈,有时技术团队可以提供一些帮助,但另一些时候,比如您的代码库庞大复杂,或者机器较为陈旧时,同样也无能为力。今天我们将为大家介绍如何手动尝试改善IntelliJ IDEA 和 Scala 插件体验,例如实现配置调整和保持良好的编码习惯。

IntelliJ IDEA v2022.3正式版下载

首先,来看 IntelliJ IDEA 中性能至关重要的两个主要领域:

  1. 创建或打开项目是一个重要的时刻,这涉及内存管理。
  2. 第二个与复杂逻辑有关,当 Scala 插件试图识别并高亮显示错误和警告或显示改进代码的提示时,以及当您执行 Scala 插件提供的一项操作和自动编辑大部分代码时,CPU 会高强度运行。

在这两种情况下,我们都可以通过相似的方式提升性能,可以:

  • 为 IntelliJ IDEA 分配更多资源
  • 禁用不使用的检查
  • 改进编码做法
  • 禁用一些功能

资源

从资源开始,这里基本上意味着提供更多内存。但是首先建议是启用内存指示器,您可以右键点击 IntelliJ IDEA 的底部面板,然后在弹出菜单中点击内存指示器。 它会告诉您IntelliJ IDEA实际使用了多少内存,让您按需设置内存大小。

如今,普通笔记本电脑有 8 GB 或更多 RAM,通常足以让 IntelliJ IDEA、其他应用程序和操作系统正常运行。

检查 IntelliJ IDEA内存消耗后,通过打开 Help(帮助)菜单并选择 Edit Custom VM Options(编辑自定义 VM 选项)来打开 idea.vmoptions 文件,将 -Xmx 设置更改为略大于内存指示器显示的值。 请注意,超过一定值后,增加 -Xmx 将无法提升性能。 在这里,增加到 4 GB 有一些效果,之后额外的提升几乎可以忽略不计。

对于 Scala 插件,如果您决定从 IntelliJ IDEA 中编译应用,增加可用内存也可能加快编译速度。 为此请转到 Settings | Build, Execution and Deployment | Scala Compiler Server(设置 | 构建、执行和部署 | Scala 编译器服务器),并修改 VM 选项。

检查

CPU 方面,Scala 插件最重要的功能之一(也会使用大量 CPU)是它的一组检查。 检查是一种逻辑,可以检查代码,寻找特定类型的问题。 有些问题非常简单,比如永远不会被修改而可被替换为不可变值的 private 变量。 其他问题,如未使用的 public 字段,可能需要很长时间调查。

如果您感觉部分检查没有用处,将其禁用可能会提高高亮显示速度。可以转到 Settings | Editor | Inspections(设置 | 编辑器 | 检查),查看可用检查列表,禁用不需要的检查。 另外,浏览设置也是全面了解 Scala 插件功能的好方法。

接下来,我们将深入探究 Scala 插件众多检查中的 3 个。 每个检查都只是插件逻辑的一小部分,对于不同用户可能会产生不同的影响。

1. Type check can be replaced by pattern matching(类型检查可被替换为模式匹配)

这个检查会在一系列 if-else 语句中查找类型检查和类型转换,并建议将其替换为模式匹配。 请注意,即使是最复杂的检查也有快速路径来检查是否不适用于给定代码段(例如,当其中没有 isInstanceOf 时)。 但是在某些情况下,您可能想要使用像这样的代码,如果您希望它保持这种状态,可以考虑禁用检查。

2. Scala 2 syntax can be replaced with Scala 3(Scala 2 语法可被替换为 Scala 3)

只有启用编译器选项 -Xsource:3 时,这个检查才有效。 它会报告可被替换为 Scala 3 的 Scala 2 语法。 如果为兼容性使用 -Xsource:3,但不需要重写代码,则可以将其安全禁用。

3. Declaration access can be weaker(声明访问可以更弱)和 Unused declaration(未使用的声明)检查

对于代码中的每个声明,这两个检查都将尝试检查声明的使用方式。 如果声明为 public 或 protected,第一个将起作用,它将检查声明是否确实在自己的类、特征或对象的作用域之外使用。如果不是,检查将提示可以将声明设为 private,第二个适用于每个声明 – 它会遍历声明的作用域并检查它是否被使用。

编码做法

Scala 让我们能够以简洁的方式编写复杂代码,但这是有代价的:我们留给 IDE 的越多,它的性能就越差。 如上所示,在许多情况下,如果您执行严格的编码做法,Scala 插件中的一些检查可能是不必要的。 事实上,如果是要弄清楚声明是否未被使用或者变量是否可以为值,Scala 插件检查所做的与我们所做的并没有太大不同。 我们会在作用域内检查,尝试找到疑似与此相关的其他元素,会查找子类、隐式转换等。

如果审查者因您代码的复杂性而苦恼,这可能表明代码还有改进空间,使其更易分析。 同样,如果您发现 IntelliJ IDEA 因为检查代码花费了太长时间而变慢,请考虑调整编码做法:

  1. 为类、方法和声明设置适当的访问修饰符,缩小作用域。
  2. 不要过度使用类型推断。
  3. 限制隐式的使用。
  4. 在组件上,选择松耦合而不是紧耦合,这样检查的逻辑就不必遵循过多路径。
  5. 在大型项目中,考虑将代码拆分为模块和子模块,再次限制检查要覆盖的范围。

您还可以转到 Settings | Languages & Frameworks | Scala(设置 | 语言和框架 | Scala)中的 Performance(性能)选项卡,查看其中的控件,并考虑项目的性能是否会受到这些控件所处理问题的影响。 例如使用很多隐式形参时,弄清楚它们可能需要很长时间, 或者如果使用大文件,对于每个类和方法,在使用代码示例的注释中都有一个文档条目,Scala 插件将尝试正确高亮显示它,您可以尝试禁用这些功能以及其他一些功能。

功能

到目前为止,我们谈到的所有提示都可能在某些特殊情况下对您有所帮助。 通常如果机器足够好,IntelliJ IDEA的性能应该还不错。 只有当项目要求特别高时,这些提示才会有用。

但可能出于某种原因,您必须在旧的、性能较差的电脑上使用IntelliJ IDEA,这是还可以尝试其他操作来改善体验。转到 Settings | Appearance & Behavior | Appearance(设置 | 外观与行为 | 外观),禁用抗锯齿和平滑滚动。 字体将显得不太光滑,滚动浏览文件内容时,也会感觉不太流畅,但这两种功能都会对性能产生一些影响。 如果这还不够,您可以打开 File(文件)菜单并启用 Power Save Mode(省电模式)。 这将关闭 IntelliJ IDEA的许多功能,所以我建议只在没有其他帮助的情况下才这样做。

如果这对您来说过于极端,您可以从 JetBrains Marketplace 安装 Automatic Power Saver 插件。 它可以让您控制 Power Save Mode(省电模式)何时自动打开和关闭,让您仍然可以在需要时使用 IntelliJ IDEA 的复杂功能。

另一种选择是禁用类型感知注解器, 您可以点击 IntelliJ IDEA 主窗口右下角的小 “[T]” 符号完成此操作。

它会阻止 Scala 插件检查代码中的类型。 注意,它不会禁用所有错误检查,只禁用那些由于类型不多而导致错误的检查,例如当您尝试将 String 作为实参传递给接受 Int 的方法时。

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

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

相关文章

解决webassembly pthread 子线程调用主线程js问题

解决webassembly pthread 子线程调用主线程js问题 背景: web端项目做了一段时间后,我们需求是加载工程是异步的,主线程会调用wasm方法,wasm内部用pthread创建出来线程,然后在这个线程里边处理任务,处理完…

园区智慧导览地图软件,智慧工厂导航定位怎么解决方案的

智慧工厂导航定位怎么解决方案的地图新基建是行业的核心数字基础需求之一,行业内中已构建了较为完整的城市级地理信息系统。园区管理涉及众多方面,因此园区的智慧信息化建设至关重要,需求越来越广泛。在智慧园区中,基于园区的电子…

【C++类和对象】类和对象(上){初识面向对象,类的引入,类的定义,类的访问限定符,封装,类的作用域,类的实例化,类对象模型,this指针}

一、面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。…

瑞吉外卖:项目介绍和环境搭建

文章目录 软件开发基础软件开发流程角色分工软件环境 瑞吉外卖项目介绍项目介绍开发流程技术选型功能架构角色 环境搭建 软件开发基础 软件开发流程 需求分析:产品原型(大体结构、页面、功能等)和需求规格说明书设计:产品文档、…

TCP/UDP的头部字段细节

目录 TCP头部字段 一、源端口目的端口(各占2字节) 二、序列号(4字节) 三、确认号(4字节) 四、数据偏移(4位) 五、保留位(6位) 六、六个控制位&#xff…

『pyqt5 从0基础开始项目实战』09.本地数据配置文件的保存与读取之txt类型(保姆级图文)

目录 导包和框架代码绑定按钮点击事件在dialog中编写代理配置弹窗UI和功能实现代理配置弹窗UI方法完整代码main.pythreads.pydialog.py 总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续…

Jenkins 实现自动化部署

安装 windows下安装:https://blog.csdn.net/u014641168/article/details/130286547 linux下安装:https://blog.csdn.net/u014641168/article/details/130282439 Jenkins支持JDK1.8对应版本说明:https://blog.csdn.net/u014641168/article/…

STM32 学习笔记_3 程序编写基础;arm 内核架构

程序编写基础 Keil 编辑器设置 抛开 tab 和空格哪个好看不谈,不同编译器设置格式不同,空格比较保险。 用户关键字:打出来的时候会高亮。 代码提示:(symbols after 是几个字符后开始提示关键字的意思) 以上…

6、索引的数据结构

3.3 常见的索引概念 索引按照物理实现方式,索引可以分为 2 种:聚簇和非聚簇索引 1、聚簇索引 5、索引的代价 空间上的代价 每建立一个索引都要为它建立一棵B树,每一棵B树的每一个节点都是一个数据页,一个页默认会占用 16KB 的存…

jsp827+java心理测评管理系统dzkfB4程序j2EE+mysql

现代社会的大学生是21世纪的主人,他们不仅需要具有为社会做贡献的真才实学,更需要健康的心理。大学生的身心健康,人格健全和谐发展是他们学习的需要,是社会对未来参与者素质的要求。 1.系统登录:系统登录是…

thinkphp:插入数据到数组

一、插入数据到数组首位(array_unshift),这里全用空值进行插入 $array [a,b,c]; //在首位加入一个空值 array_unshift($array ,); //将数组输出 print_r($array); 输出结果: 二、插入数据到数组末尾(array_push&…

docker安装kafka,并集成springboot进行测试

大家好,今天我们开始学习kafka中间件,今天我们改变一下策略,不刷视频学习,改为实践学习,在网上找一些案例功能去做,来达到学习实践的目的。 首先,是安装相关组件。 1. docker安装安装 1.1 yu…

深度学习中的各种不变性

不变性 平移不变性(Translation Invariance)旋转不变性(Ratation Invariance)尺度不变性(Size Invariance)光照不变性(Illumination Invariance)仿射不变性(Affine Invar…

PS学习记录-图像【像素】与【分辨率】的说明

我们经常能在图片的属性中看到 1920像素x1080像素 (老司机在视频文件中也经常看到~) 这就是我们常说的图片分辨率,以下是我学习整理的关于像素、分辨率的资料。 注意: 图像分辨率是针对【位图】的,图片分辨率决定了…

记录-JS简单实现购物车图片局部放大预览效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一、实现效果 二、代码实现 代码不多&#xff0c;先看一下 HTML 里面结构很简单&#xff0c;初始化 MagnifyingGlass 对象来关联一个 IMG 标签来实现放大。 <!DOCTYPE html> <html> <h…

做一个网站需要多少个技术人员?

作为互联网从业者&#xff0c;这么多年来经常会碰到一个灵魂拷问&#xff0c;那就是“为什么一个网站需要那么多技术人员&#xff1f;”&#xff0c;尤其是提问者如果再追问一下“听说几个相关专业的学生一个课程的作业就是开发一个网站或者app&#xff0c;那为什么现在主流的网…

C++ | 认识标准库string和vector

本文概要 本篇文章主要介绍C的标准库类型string和vector&#xff0c;文中描述和代码示例很详细&#xff0c;看完即可掌握&#xff0c;感兴趣的小伙伴快来一起学习吧。 &#x1f31f;&#x1f31f;&#x1f31f;个人简介 &#x1f31f;&#x1f31f;&#x1f31f; ☀️大家好&a…

stable diffusion安装从0到1总结:包括遇到的坑和步骤

注&#xff1a;最低电脑配置&#xff1a;8G Vram16G RAM30G磁盘空间以上&#xff0c;20系列显卡及以上&#xff0c;windows>linux>macos。 文件可以不放在系统盘。举个例子&#xff1a;安装在D盘&#xff0c;在D盘创建一个StableDiffusion文件夹。下载下面文件: 1.下载…

为什么实现 API 最佳实践需要重新考虑安全性

随着应用程序编程接口 (API) 的使用与日俱增&#xff0c;实现和维护有效安全性的挑战从未像现在这样大。 由于缺乏管理 API 的单一标准&#xff0c;这意味着团队不能仅依靠工具来解决安全问题&#xff0c;因此这一挑战变得更加严峻。没有任何一种产品可以解决 API 环境的每种…

pg编码相关问题梳理

Lightdb/PG 编码相关问题梳理 之前在通过SQL文件导入数据时&#xff0c;报&#xff1a;ERROR: invalid byte sequence for encoding "EUC_CN"错误。然后就梳理了一下编码相关问题&#xff0c;这边记录一下。涉及到如下两种类型的报错&#xff1a; ERROR: invalid b…