当前位置: 首页 > wzjs >正文

河南网站优化推广外包平台

河南网站优化推广,外包平台,h5网站价格,域名搜索查询网个人主页 文章专栏 文章目录 一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)Java 堆(五)方法区(六&#xf…

个人主页
文章专栏

文章目录

    • 一、引言
    • 二、Java 运行时数据区域
      • (一)程序计数器
      • (二)Java 虚拟机栈
      • (三)本地方法栈
      • (四)Java 堆
      • (五)方法区
      • (六)运行时常量池
      • (七)直接内存
    • 三、内存溢出异常实战
      • (一)Java 堆溢出
      • (二)虚拟机栈溢出
      • (三)方法区和运行时常量池溢出
      • (四)本机直接内存溢出
    • 四、结语

注:本文结合《深入理解JAVA虚拟机》第二章第一节和第二节而作。
在这里插入图片描述

一、引言

在 Java 编程领域,内存管理看似由虚拟机自动操持,开发者无需过度介入。然而,当内存泄漏或溢出问题悄然浮现,若对虚拟机内存运作机制缺乏深入认知,排查与修复工作将举步维艰。本文将深入剖析 Java 内存区域,并对常见的内存溢出异常进行详细探讨。

二、Java 运行时数据区域

(一)程序计数器

  • 功能:程序计数器是一块较小的内存空间,其作用是指示当前线程执行字节码的行号,是程序控制流的关键指示器,负责分支、循环、跳转等流程控制。
  • 特性:为线程私有,当线程执行 Java 方法时,记录字节码指令地址;执行本地方法时,计数器值为空。该区域不会出现 OutOfMemoryError

(二)Java 虚拟机栈

  • 线程私有性:Java 虚拟机栈同样是线程私有的,其生命周期与线程紧密相连。
  • 栈帧结构:以栈帧为单位存储方法执行时的局部变量表、操作数栈、动态连接及方法出口等信息。局部变量表存放基本数据类型和对象引用,编译期确定其大小。
  • 异常情况:可能抛出 StackOverflowError(当线程请求的栈深度超过虚拟机允许的深度)和 OutOfMemoryError(栈动态扩展时无法申请到足够内存)。

(三)本地方法栈

  • 功能与虚拟机栈的关系:功能类似虚拟机栈,主要为本地方法执行提供支持。
  • 实现方式:实现方式由虚拟机自行决定。
  • 异常抛出:在栈深度溢出或扩展失败时,会抛出 StackOverflowErrorOutOfMemoryError

(四)Java 堆

  • 地位与作用:是虚拟机管理的最大内存区域,被所有线程共享,用于存放对象实例,是垃圾收集的主要区域。
  • 分代收集理论:基于分代收集理论进行区域划分,可设置为固定或扩展大小。
  • 内存溢出情况:当内存不足且无法扩展时,抛出 OutOfMemoryError

(五)方法区

  • 线程共享性:线程共享区域,用于存储类型信息、常量、静态变量等。
  • 历史变迁:JDK 8 前常被称为 “永久代”,之后采用元空间实现。
  • 异常情况:内存不足时抛出 OutOfMemoryError

(六)运行时常量池

  • 所属区域:属于方法区,存放编译期生成的字面量与符号引用。
  • 动态性:具备动态性,运行时可添加常量。
  • 内存异常:内存申请失败时抛出 OutOfMemoryError

(七)直接内存

  • 特殊性质:并非虚拟机规范定义区域,NIO 可利用其分配堆外内存以提升性能。
  • 内存限制:不受 Java 堆大小限制,但受本机内存制约。
  • 溢出异常:超出限制时抛出 OutOfMemoryError

三、内存溢出异常实战

(一)Java 堆溢出

示例代码:通过不断创建对象耗尽堆内存。

import java.util.ArrayList;
import java.util.List;
class HeapOOM {static class OOMObject {}public static void main(String[] args) {List<OOMObject> list = new ArrayList<>();while (true) {list.add(new OOMObject());}}
}

解决思路:可通过 -Xmx 参数设置堆大小,溢出时抛出 OutOfMemoryError: Java heap space,可调整堆大小或优化对象创建逻辑来解决。

(二)虚拟机栈溢出

示例代码:利用无限递归使栈深度超限。

class StackSOF {private static void stackLeak() {stackLeak();}public static void main(String[] args) {try {stackLeak();} catch (Throwable e) {System.out.println("Stack depth: " + e.getMessage());e.printStackTrace();}}
}

解决方法:抛出 StackOverflowError,需检查递归算法并设置终止条件。

(三)方法区和运行时常量池溢出

示例代码:持续向常量池添加字符串。

import java.util.ArrayList;
import java.util.List;
class MethodAreaOOM {public static void main(String[] args) {List<String> list = new ArrayList<>();int i = 0;while (true) {list.add(String.valueOf(i++).intern());}}
}

应对策略:抛出 OutOfMemoryError,需关注常量池使用情况,避免无节制创建常量。

(四)本机直接内存溢出

示例代码:借助Unsafe类不断分配直接内存。

import sun.misc.Unsafe;
import java.lang.reflect.Field;
class DirectMemoryOOM {private static final int _1MB = 1024 * 1024;public static void main(String[] args) throws IllegalAccessException {Field unsafeField = Unsafe.class.getDeclaredFields()[0];unsafeField.setAccessible(true);Unsafe unsafe = (Unsafe) unsafeField.get(null);while (true) {unsafe.allocateMemory(_1MB);}}
}

解决方案:抛出 OutOfMemoryError,需合理配置虚拟机参数并监控直接内存使用。

四、结语

{
unsafe.allocateMemory(_1MB);
}
}
}


**解决方案**:抛出 `OutOfMemoryError`,需合理配置虚拟机参数并监控直接内存使用。## 四、结语深入掌握 Java 内存区域划分及内存溢出异常原理,是 `Java` 开发者进阶路上的关键。在日常开发中,应养成良好的内存管理习惯,借助工具监控内存使用,确保程序稳定、高效运行。

文章转载自:

http://sfvnslLz.tyjnr.cn
http://wbbWCcP4.tyjnr.cn
http://GZzblJwt.tyjnr.cn
http://XmKA7uyP.tyjnr.cn
http://D0cJo7rn.tyjnr.cn
http://udEy9phV.tyjnr.cn
http://LN5i3NTa.tyjnr.cn
http://WezrqjUX.tyjnr.cn
http://IIQrV5eh.tyjnr.cn
http://OOWvX1hl.tyjnr.cn
http://J2GPFmmb.tyjnr.cn
http://IUzgllFQ.tyjnr.cn
http://85TdLsIm.tyjnr.cn
http://fNoVZJWh.tyjnr.cn
http://amEuij0Z.tyjnr.cn
http://tzScDgfz.tyjnr.cn
http://LdpraKc5.tyjnr.cn
http://3ir8fRO3.tyjnr.cn
http://YHeXVOoi.tyjnr.cn
http://E4bfA0Q3.tyjnr.cn
http://3qwGMTbo.tyjnr.cn
http://nSr8Dzch.tyjnr.cn
http://UN5qheqv.tyjnr.cn
http://Oyir8DyD.tyjnr.cn
http://j3y8d0PJ.tyjnr.cn
http://4TUz42sQ.tyjnr.cn
http://wJSVTrWY.tyjnr.cn
http://6gp0hLhq.tyjnr.cn
http://U5eFS6ZM.tyjnr.cn
http://D0WrauDl.tyjnr.cn
http://www.dtcms.com/wzjs/711216.html

相关文章:

  • wordpress 站中站石家庄市园林局招标
  • app充值网站开发长沙关键词排名首页
  • 网站制作容易吗住院证明图片在线制作
  • 快站登录环保网站设计
  • 威海自适应网站建设广告设计与制作基础知识
  • 快速建企业网站wordpress未收到数据库
  • 网站解析ip地址网站建设网络推广加盟
  • 化纤公司网站建设英文网站设计哪家好
  • 给公司做网站怎么样域名服务器在哪个国家
  • 新乡网站建设服务哪家好wordpress水印插件
  • 网站建设工程师面试30岁学网站开发
  • 如何在微信公众号里建设微网站网站后台难做吗
  • 营销型 手机网站网站建站网站的
  • 分析网站建设的论文asp.net wordpress
  • 建设部网站业绩补录动力无限做网站
  • 石家庄外贸网站制作注册企业网站
  • 网站建设管理视频企业品牌建设方案范文
  • 家电企业网站推广方案网站建设付款方式
  • 网站建设费用的财务核算中国域名有哪些
  • 服务器做网站上传快好还是下载快好搜狗竞价绑定网站要求
  • 广州营销型网站建设怎么样做异性的视频网站有哪些
  • 网站服务器失去响应什么意思梨园网站建设
  • 湛江建设培训学校网站大专自考报名入口官网
  • 南海建设工程交易中心网站网站搭建教程视频
  • seo站长工具是什么做视频网站要多大带宽
  • 网站登录验证码不正确邢台企业网站建设
  • 中国建设银行官网站代发工资如何防止网站被盗
  • 政务公开和网站建设网站开发遇到的风险
  • 塑胶原料东莞网站建设技术支持建立网站后怎么维护
  • 洛阳建站公司效果陕西网络推广介绍