我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java虚拟机内存优化的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java虚拟机内存优化的方法

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

前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露。众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java的JVM有一套自己的垃圾回收机制来回收内存,在许多情况下并不需要java程序开发人员操太多的心,但也是存在泄露问题的,只是比C++小一点。比如说,程序中存在被引用但无用的对象:程序引用了该对象,但后续不会或者不能再使用它,那么它占用的内存空间就浪费了。

我们先来看看GC是如何工作的:监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,当该对象不再被引用时,释放对象(GC本文的重点,不做过多阐述)。很多Java程序员过分依赖GC,但问题的关键是无论JVM的垃圾回收机制做得多好,内存总归是有限的资源,因此就算GC会为我们完成了大部分的垃圾回收,但适当地注意编码过程中的内存优化还是很必要的。这样可以有效的减少GC次数,同时提升内存利用率,***限度地提高程序的效率。

总体而言,Java虚拟机的内存优化应从两方面着手:Java虚拟机和Java应用程序。前者指根据应用程序的设计通过虚拟机参数控制虚拟机逻辑内存分区的大小以使虚拟机的内存与程序对内存的需求相得益彰;后者指优化程序算法,降低GC负担,提高GC回收成功率。

通过参数优化虚拟机内存的参数如下所示:

◆  Xms

初始Heap大小

◆ Xmx

java heap***值

◆ Xmn

young generation的heap大小

◆ Xss

每个线程的Stack大小

上面是三个比较常用的参数,还有一些:

◆ XX:MinHeapFreeRatio=40

Minimum percentage of heap free after GC to avoid expansion.

◆ XX:MaxHeapFreeRatio=70

Maximum percentage of heap free after GC to avoid shrinking.

◆ XX:NewRatio=2

Ratio of new/old generation sizes. [Sparc -client:8; x86 -server:8; x86 -client:12.]-client:8 (1.3.1+), x86:12]

◆ XX:NewSize=2.125m

Default size of new generation (in bytes) [5.0 and newer: 64 bit VMs are scaled 30% larger; x86:1m; x86, 5.0 and older: 640k]

◆ XX:MaxNewSize=

Maximum size of new generation (in bytes). Since 1.4, MaxNewSize is computed as a function of NewRatio.

◆ XX:SurvivorRatio=25

Ratio of eden/survivor space size [Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32]

◆ XX:PermSize=

Initial size of permanent generation

◆ XX:MaxPermSize=64m

Size of the Permanent Generation. [5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.]

下面所说通过优化程序算法来提高内存利用率,并降低内存风险,完全是经验之谈,仅供参考,如有不妥,请指正,谢谢!

尽早释放无用对象的引用(XX = null;)

看一段代码:

public List<PageData> parse(HtmlPage page) {          List<PageData> list = null;                  try {              List valueList = page.getByXPath(config.getContentXpath());              if (valueList == null || valueList.isEmpty()) {                  return list;              }              //需要时才创建对象,节省内存,提高效率              list = new ArrayList<PageData>();              PageData pageData = new PageData();              StringBuilder value = new StringBuilder();              for (int i = 0; i < valueList.size(); i++) {                  HtmlElement content = (HtmlElement) valueList.get(i);                  DomNodeList<HtmlElement> imgs = content.getElementsByTagName("img");                  if (imgs != null && !imgs.isEmpty()) {                      for (HtmlElement img : imgs) {                          try {                              HtmlImage image = (HtmlImage) img;                              String path = image.getclass="lazy" data-srcAttribute();                              String format = path.substring(path.lastIndexOf("."), path.length());                              String localPath = "D:/images/" + MD5Helper.md5(path).replace("\\", ",").replace("/", ",") + format;                              File localFile = new File(localPath);                              if (!localFile.exists()) {                                  localFile.createNewFile();                                  image.saveAs(localFile);                              }                              image.setAttribute("class="lazy" data-src", "file:///" + localPath);                              localFile = null;                              image = null;                              img = null;                          } catch (Exception e) {                          }                      }                      //这个对象以后不会在使用了,清除对其的引用,等同于提前告知GC,该对象可以回收了                      imgs = null;                  }                  String text = content.asXml();                  value.append(text).append("<br/>");                  valueList=null;                  content = null;                  text = null;              }              pageData.setContent(value.toString());              pageData.setCharset(page.getPageEncoding());                         list.add(pageData);              //这里 pageData=null; 是没用的,因为list仍然持有该对象的引用,GC不会回收它              value=null;              //这里可不能 list=null; 因为list是方法的返回值,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除          } catch (Exception e) {                      }                  return list;  }

谨慎使用集合数据类型,如数组,树,图,链表等数据结构,这些数据结构对GC来说回收更复杂。

避免显式申请数组空间,不得不显式申请时,尽量准确估计其合理值。

尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费

尽量避免强制系统做垃圾内存的回收,增长系统做垃圾回收的最终时间

尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。

尽量在合适的场景下使用对象池技术以提高系统性能

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java虚拟机内存优化的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java虚拟机内存优化的方法

这篇文章主要介绍“Java虚拟机内存优化的方法”,在日常操作中,相信很多人在Java虚拟机内存优化的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java虚拟机内存优化的方法”的疑惑有所帮助!接下来,请跟
2023-06-17

浅谈Java虚拟机对内部锁的四种优化方式

自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化。这些优化主要包括锁消除(Lock Elision)、锁粗化(Lock Coarsening)、偏向锁(Biased Locking)以及适应性锁(Adaptive
2023-05-31

如何优化Java虚拟机

这篇文章将为大家详细讲解有关如何优化Java虚拟机,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。堆设置-Xmx3550m:设置JVM最大堆内存为3550M。-Xms3550m:设置JVM初始堆内存为355
2023-05-30

Windows系统虚拟内存的设置优化方法整理[图文]

首先得明白什么是虚拟内存,以及虚拟内存有什么作用。在早期,因为内存价格非常昂贵,所以一般电脑上都不会配置太多。但有时候,我们使用的应用程序所需要的内存量会超过了物理内存量,这时,操作系统就会暂时将不需要访问的数据通过一种叫做“分
2023-05-24

java内存优化的方法有哪些

减少使用不必要的对象:避免在循环中创建新对象,尽量重用已经存在的对象。使用合适的数据结构:选择合适的集合类或数据结构,以便在存储和访问数据时能够高效利用内存。避免过多的自动装箱和拆箱:自动装箱会创建新的对象,消耗额外的内存。对于基本类型
2023-10-27

java虚拟机内存怎么设置

Java虚拟机内存区域和设置Java虚拟机(JVM)内存划分为不同的区域,包括:程序计数器、栈、堆、方法区。用户可以通过启动参数调整内存区域的大小。常用参数包括:堆大小(-Xms、-Xmx)、年轻代大小(-XX:NewSize、-XX:MaxNewSize、-XX:SurvivorRatio)、方法区大小(-XX:MetaspaceSize)。内存设置对应用程序性能有显著影响。优化准则包括:根据对象创建和丢弃率设置年轻代大小,根据对象使用设置堆大小,根据类和常量数量设置方法区大小。可以通过JMX或命令行工
java虚拟机内存怎么设置
2024-04-11

阿里云ECS虚拟内存如何优化内存使用

阿里云ECS虚拟内存是云计算中的一种重要资源,它决定了一个虚拟机可以运行的程序数量和程序的运行速度。然而,如何有效地使用和优化ECS虚拟内存,是每个云用户都需要了解和掌握的技能。本文将详细介绍ECS虚拟内存的使用方法和优化策略。一、什么是阿里云ECS虚拟内存阿里云ECS虚拟内存是指虚拟机在运行时,可以使用的物理内
阿里云ECS虚拟内存如何优化内存使用
2023-11-07

java中内存优化的方法有哪些

这篇文章将为大家详细讲解有关java中内存优化的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、不必要的自动装箱。自动装箱是将基础数据类型转换为相应的复杂类型,在HashMap的追加删除调查中
2023-06-15

Java虚拟机的内存结构是怎样的

本篇内容主要讲解“Java虚拟机的内存结构是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java虚拟机的内存结构是怎样的”吧!一:简介内存(Memory)也被称为内存储器,其作用是用于暂
2023-06-02

JVM优化:虚拟机栈&本地方法栈

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表、操作数 栈、动态连接和方法返回地址等信息。每一个方法从调用至执行完成的过程,都对应着一个栈帧在虚拟机栈里从入 栈到出栈的过程。

独享虚拟主机seo优化的方法是什么

独享虚拟主机SEO优化的方法包括:1. 确保网站速度快:优化网站加载速度,减少页面加载时间,可以通过压缩图片、优化代码、使用CDN等方式来提高网站速度。2. 选择合适的域名:选择与网站主题相关的域名,尽量包含关键词,并且易于记忆和输入。3.
2023-09-12

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

JVM(Java虚拟机) JVM 内存模型 结构图 jdk1.8 结构图(极简) jdk1.8 结构图(简单) JVM(Java虚拟机): 是一个抽象的计算模型。如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域。
2023-08-30

理解Java虚拟机(JVM):优化代码执行效率的内部机制

本文将深入理解JVM的内部机制,以及如何通过优化代码执行提高程序的性能。
虚拟机程序2024-11-30

win10电脑虚拟内存设置的方法

这篇文章主要介绍“win10电脑虚拟内存设置的方法”,在日常操作中,相信很多人在win10电脑虚拟内存设置的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win10电脑虚拟内存设置的方法”的疑惑有所帮助!
2023-06-28

大数据框架中的Java虚拟机优化

Java基于JVM运行的特性使得Java程序可以一次编写,多处运行,摆脱分布式集群中不同操作系统和硬件处理框架带来的束缚,使得开发者可以更加专注于代码逻辑的开发。

ubuntu中swap(虚拟内存)设置方法

ubuntu(虚拟机)版本16.04 LTS 添加swap用free查看swap分区大小free -m创建一个swap文件夹mkdir swap cd swap sudo dd if=/dev/zero of=s
2022-06-04

Win7 虚拟内存 正确设置方法

1、何为虚拟内存?  内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称
2023-05-24

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录