JVM 性能调优- 五种内存溢出(5)

news2024/11/27 4:12:31

在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory):

  • 关系:

    • 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。
    • 堆内存是Java虚拟机的一部分,用于存储Java对象。堆内存由Java虚拟机的堆内存分配器来分配和管理。
  • 区别:

    • 分配方式:直接内存是通过调用操作系统的本地内存分配函数来分配的,而堆内存是由Java虚拟机的堆内存分配器来分配的。
    • 受限性:直接内存不受Java堆大小的限制,它可以分配的内存量通常受限于操作系统本地内存的大小。而堆内存的大小受Java虚拟机的堆内存分配器和-Xmx参数的限制。
    • 垃圾回收:直接内存不受Java对象垃圾回收的影响,因此,直接内存的分配和释放不会触发Java堆的垃圾回收操作。而堆内存中的Java对象会受到Java堆的垃圾回收操作的影响。
    • 性能:直接内存的分配和释放通常比堆内存更高效,因为它直接利用了操作系统的本地内存管理机制。而堆内存的分配和释放涉及到Java虚拟机的堆内存分配器的复杂逻辑。

总结起来,直接内存和堆内存是Java中两种不同的内存区域,它们有着不同的分配方式、受限性、垃圾回收机制和性能特点。

Java 中的内存溢出是很常见的场景,除了程序计数器外,JVM内存的其他几个运行时区域都有可能发生 OutOfMemoryError(OOM)异常。下面通过一些场景来验证JVM不同内存区域造成 OOM 的情况。

内存溢出分类

内存溢出,我们可以想象一下生活中的场景,比如我们给水杯倒水,当水杯满了后,继续倒水,就会出现水溢出了。我们把水杯比作内存区域,水比作对象,当对象创建多了,又没有及时把水倒掉或者喝掉,就会越倒越多,最后水漫出来了。

JVM 中最常见的两个错误就是 StackoverflowError(栈溢出) 和 OutofMemoryError(堆溢出)。而 OutOfMemoryError 又有 5 种异常。

  • java.lang.OutOfMemoryError:java heap space(堆内存溢出异常)
  • java.lang.OutOfMemoryError:GC overhead limit exceeded(GC 回收时间过长)
  • java.lang.OutOfMemoryError:Direct buffer memory(直接内存异常)
  • java.lang.OutOfMemoryError:unable to create new native thread(创建线程数达到上限异常)
  • java.lang.OutOfMemoryError:Metaspace(元空间内存不足)

StackoverflowError 和 OutofMemoryError 属于 Error,如下图的类继承关系图。

栈溢出异常

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出 StackOverflowError 异常。

栈溢出的场景,最简单的方式是多次递归调用。分配的栈空间大小一般为 512 KB,如果用完了,则会抛出异常。

编写代码

package com.test;

public class TestStackOverflowError {
    public static void main(String[] args) {
        stackOverflowError();
    }

    private static void stackOverflowError() {
        stackOverflowError();
    }
}

运行程序

Exception

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

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

相关文章

re:从0开始的CSS学习之路 3. CSS三大特性

0. 写在前面 很多的学习其实并不知道在学什么,学一个新东西学着学着就变成了抄代码,背概念。把看视频学习变成了一个赶进度的任务,到头来只学到了一些皮毛。 文章目录 0. 写在前面1. CSS三大特性——层叠性2. CSS三大特性——优先级3. CSS三…

C语言在Visual Studio 2010环境下使用<regex.h>正则表达式函数库

在Visual Studio 2010环境下&#xff0c;如果C语言想要使用<regex.h>头文件进行正则表达式匹配&#xff0c;则需要pcre3.dll这个动态链接库&#xff0c;可以去网上下载。 下载的网址是&#xff1a;Pcre for Windowspcre {whatisit}https://gnuwin32.sourceforge.net/pac…

12-树-有序链表转换二叉搜索树

这是树的第12篇算法&#xff0c;力扣链接。 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: h…

解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)

今天也是去学习了一波字符串函数&#xff0c;想着也为了加深记忆&#xff0c;所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…

宏景eHR fieldsettree SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR fieldsettree 接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃取数据库敏感…

ChatGPT学习第一周

&#x1f4d6; 学习目标 掌握ChatGPT基础知识 理解ChatGPT的基本功能和工作原理。认识到ChatGPT在日常生活和业务中的潜在应用。 了解AI和机器学习的基本概念 获取人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;的初步了解。理解这些技术是如何支撑…

电动汽车雷达技术概述 —— FMCW干扰问题

一、电动汽车上有多少种传感器&#xff1f; 智能电动汽车&#xff08;包括自动驾驶汽车&#xff09;集成了大量的传感器来实现高级驾驶辅助系统&#xff08;ADAS&#xff09;、自动驾驶功能以及车辆状态监测等功能。以下是一份相对全面的智能电动汽车中可能使用到的传感器列表…

虚拟飞控计算机:飞行控制系统验证与优化的利器

01.背景介绍 随着航空技术的飞速发展&#xff0c;飞行控制系统作为飞机的心脏&#xff0c;全面负责监测、调整和维持飞行器的姿态、航向、高度等参数&#xff0c;用以确保飞行的安全和稳定。为了满足这些要求&#xff0c;现代飞控系统通常采用先进的处理器和外设来确保其高效、…

CSS的动画

CSS的动画 在本节&#xff0c;我们将学习keyframes动画。 1. 动画的基本使用 1. 定义动画 定义动画有两种写法&#xff1a; 简单定义方式 keyframes 动画名 {/* from代表初始状态 */from {/*property1:value1*/transform: translate(0%);}/* to代表结束状态 */to {transfor…

vue3 之 商城项目—项目搭建起步

1.创建项目 1️⃣ npm init vuelatest2️⃣ npm install3️⃣ npm run dev4️⃣目录调整 2.git管理项目 基于creact-vue创建出来的项目默认没有初始化git仓库&#xff0c;需要我们手动初始化 执行命令 git init git add. git commit -m init3.项目起步—配置别名路径联…

Xampp中Xdebug的安装使用

工欲善其事&#xff0c;必先利其器 XDebug简介 XDebug 是一个用于 PHP 的调试和性能分析工具。它提供了一系列功能&#xff0c;帮助开发者在开发和调试 PHP 应用程序时更加高效。 以下是 XDebug 的一些主要特性和功能&#xff1a; 调试功能&#xff1a; 断点调试&#xff1a;…

幻兽帕鲁怎么样?好玩? Mac版的玩《幻兽帕鲁》也很简单,只需三个步骤

幻兽帕鲁怎么样 幻兽帕鲁是一款集合了多种游戏元素的游戏&#xff0c;它巧妙地融合了《方舟:生存进化》的野外生存挑战、《荒野之息》的开放世界探索、《魔兽世界》的多元角色互动以及宝可梦的精灵捕捉与培养等经典游戏元素。游戏的核心系统是「帕鲁」捕获&#xff0c;你可以让…

电力负荷预测 | 基于LSTM、TCN的电力负荷预测(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于LSTM、TCN的电力负荷预测(Python) 源码设计 #------------------

Java HashSet 重写 equals() 和 hashCode() 对象去重

Ailt Insert 选择 equals() 和 hashCode() package com.zhong.collection.set;import java.util.HashSet; import java.util.Objects;public class HashSetDeduplication {public static void main(String[] args) {// HashSet 对象去重HashSet<Student> students new …

momentJs推导日历组件

实现效果: 代码&#xff1a; 引入momentjs然后封装两个函数构建出基本数据结构 import moment from moment;// 某月有多少天 export const getEndDay (m) > m.daysInMonth();/*** description 获取本月空值数据* param { Date } year { } 年度* param { Number } month …

springboot Feign方式注入注解详解

一、FeignClient注解详解 FeignClient是Spring Cloud中用于声明Feign客户端的注解&#xff0c;它使得编写HTTP客户端变得更简单。通过Feign的自动化配置机制&#xff0c;可以很容易地编写HTTP API客户端。以下是FeignClient的详解&#xff1a; 作用&#xff1a;FeignClient注解…

C++,stl,vector容器详解

目录 1.vector基本概念 2.vector的创建 3.vector赋值操作 4.vector容量和大小的操作 5.vector容器的插入和删除 6.vector容器的数据存取 7.vector互换容器 8.vector容器预留空间 1.vector基本概念 2.vector的创建 #include<bits/stdc.h> using namespace std;int m…

CSS综合案例4

CSS综合案例4 1. 综合案例 我们来做一个静态的轮播图。 2. 分析思路 首先需要加载一张背景图进去需要4个小圆点&#xff0c;设置样式&#xff0c;并用定位和平移调整位置添加两个箭头&#xff0c;也是需要用定位和位移进行调整位置 3. 代码演示 html文件 <!DOCTYPE htm…

一个Vivado仿真问题的debug

我最近在看Synopsys的MPHY仿真代码&#xff0c;想以此为参考写个能实现PWM-G1功能的MPHY&#xff0c;并应用于ProFPGA原型验证平台。我从中抽取了一部分代码&#xff0c;用Vivado自带的仿真器进行仿真&#xff0c;然后就遇到了一个莫名其妙的问题&#xff0c;谨以此文作为debug…

vue3项目中使用mapv

vue3项目中使用mapv mapv是百度地图官方提供的地图数据可视化开源项目&#xff0c;提供了很多效果酷炫的绘图api mapv地址在这里&#xff0c;示例图在这里 先解释为什么要用mapv echarts画的地图&#xff0c;都是行政区划&#xff0c;就算是geo地图&#xff0c;也只能在行政…