Java内存空间(学习随笔)

1、程序运行中栈可能会出现两种错误

  • StackOverFlowError: 若栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前 Java
    虚拟机栈的最大深度的时候,就抛出 StackOverFlowError 错误。
  • OutOfMemoryError: 如果栈的内存大小可以动态扩展, 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。

2、JDK1.7和JDK1.8的区别

在这里插入图片描述

在这里插入图片描述

3、Java 虚拟机栈和本地方法栈的区别和联系

Java虚拟机栈和本地方法栈是Java虚拟机(JVM)为每个线程分配的内存区域,用于执行方法的调用和执行。

  1. 区别:
  • Java虚拟机栈:它用于存储Java方法的局部变量、方法参数、返回值和部分方法调用信息。每个线程在运行时都会创建一个对应的Java虚拟机栈,栈的大小可以动态调整。Java虚拟机栈采用后进先出(LIFO)的数据结构,用于支持方法的调用和返回。
  • 本地方法栈:它类似于Java虚拟机栈,但是用于执行本地方法(Native Method)的调用和执行。本地方法是使用其他语言编写的方法,如C或C++,并且通过Java Native Interface(JNI)与Java代码进行交互。本地方法栈也是每个线程独立的,用于支持本地方法的调用和返回。
  1. 联系:
  • Java虚拟机栈和本地方法栈都是为了支持方法的调用和执行而存在的。
  • 它们都是线程私有的,每个线程都有自己的Java虚拟机栈和本地方法栈。
  • Java虚拟机栈和本地方法栈都会随着方法的调用和返回而动态地进行入栈和出栈操作。

总之,Java虚拟机栈和本地方法栈在功能和作用上有所不同,但都是为了支持方法的调用和执行而存在的,并在运行时为每个线程分配独立的内存区域。

4、Java堆空间

在Java虚拟机中,堆是一块用于存储对象实例的内存区域。以下是关于Java虚拟机中堆的位置、作用和分布的梳理:

位置:

  • 堆位于Java虚拟机的内存区域中,是Java应用程序运行时的主要内存区域之一。

作用:

  • 堆用于存储Java程序中的对象实例。所有通过关键字new创建的对象都会在堆上分配内存。
  • 堆是Java中动态内存分配的地方,对象的创建和销毁都在堆上进行。
  • 堆提供了自动的内存管理机制,通过垃圾回收器来自动回收不再使用的对象所占用的内存。

分布:

  • 堆的大小可以通过Java虚拟机的参数进行调整,一般分配给堆的内存大小会根据应用程序的需求进行动态调整。
  • 堆被划分为年轻代和老年代两个区域,以支持不同的垃圾回收算法。
    • 年轻代:年轻代用于存放新创建的对象,它又被分为Eden空间和两个Survivor空间(通常是From和To)。大部分对象在创建后会首先被分配到Eden空间。
    • 老年代:老年代用于存放经过多次垃圾回收仍然存活的对象。一般来说,老年代中的对象生命周期较长。
  • 堆的分布和对象的移动可以根据垃圾回收器的算法而有所不同,比如,新生代的垃圾回收一般采用复制算法,而老年代的垃圾回收一般采用标记-清除算法或标记-压缩算法。

总之,Java虚拟机中的堆是用于存储对象实例的内存区域,具有动态分配和自动回收的特性。它被分为年轻代和老年代,为Java应用程序提供了高效的内存管理机制。

5、方法区

  • 当虚拟机要使用一个类时,它需要读取并解析 Class 文件获取相关信息,再将信息存入到方法区。
  • 方法区会存储已被虚拟机加载的 类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

6、字符串常量池

在这里插入图片描述

7、JVM—永久代

  • 在旧版的Java虚拟机中,存在一个称为"永久代"的内存区域。它位于堆内存之外,用于存储一些类的元数据信息,如类的结构、字段、方法、常量池等。永久代的主要功能是存储长时间存在的类信息,这些信息在运行时不会被回收。
  • 然而,永久代存在一些问题。首先,永久代的大小是固定的,无法根据实际需要进行调整,容易导致内存溢出。其次,永久代的垃圾回收机制比较复杂,容易导致性能问题。此外,一些特殊的应用场景下,如动态生成大量类的情况,也容易导致永久代溢出。
  • 因此,在Java 8版本中,JVM引入了元空间(Metaspace)来取代永久代。元空间是位于堆内存之外的内存区域,用于存储类的元数据信息。与永久代不同,元空间的大小可以根据实际需要进行动态调整,避免了永久代的内存溢出问题。此外,元空间的垃圾回收机制也更加简单高效。
  • 总结起来,元空间取代永久代的原因主要是为了解决永久代存在的内存溢出和性能问题,并提供更好的灵活性和可靠性。

8、深入学习链接

9、Java的垃圾回收机制

  • 当Java程序中的对象不再被引用时,垃圾回收机制会自动回收这些对象占用的内存空间,以便为新的对象腾出空间。
  • Java的垃圾回收机制是自动化的,程序员不需要显式地释放内存。

Java的垃圾回收机制主要基于以下两个原则:

  1. 引用计数:每个对象都有一个引用计数器,当有引用指向对象时,计数器加1;当引用停止指向对象时,计数器减1。当计数器为0时,对象被认为是不可达的,可以被回收。

  2. 可达性分析:通过一系列称为"GC Roots"的根对象作为起点,通过对象之间的引用链,判断对象是否可达。如果对象不可达,则可以被回收。

Java的垃圾回收机制采用分代收集算法,将内存分为

  • 新生代(Young Generation)存放新创建的对象
  • 老年代(Old Generation)存放存活时间较长的对象
  • 永久代(PermGen/Metaspace)存放类的元数据信息。

垃圾回收过程主要包括以下几个步骤:

  1. 标记:从GC Roots开始,对所有可达对象进行标记。

  2. 清除:清除所有未被标记的对象,释放其占用的内存空间。

  3. 压缩(可选):将存活的对象往一端移动,整理内存空间,以便为新的对象分配连续的内存空间。

需要注意的是,Java垃圾回收机制是与具体的JVM实现相关的,不同的JVM可能会有不同的垃圾回收算法和策略。一般来说,JVM会根据当前的内存使用情况和系统负载等因素,动态调整垃圾回收的频率和策略,以达到最佳的性能和内存利用率。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper-JavaApI操作

JavaApI操作 JavaApI操作1) Curator 介绍2) Curator API 常用操作a) 建立连接与CRUD基本操作b) Watch事件监听c) 分布式锁c.1) 介绍c.2) Zookeeper分布式锁原理c.3) 案例:模拟12306售票 JavaApI操作 1) Curator 介绍 Curator 是 Apache ZooKeeper 的Java客户端库。…

工作杂记-YUV的dump和read

工作小记-YUV的dump和read 工作杂记-YUV的dump和read利用dump生成图片 yuv2imgyuv2img代码 工作杂记-YUV的dump和read 工作中涉及到模型验证相关的工作,这里是三个模型的共同作用,在感知模型读取图片的时候,把输入替换成自己给定的输入&…

STM32--WDG看门狗

文章目录 WDG简介IWDGIWDG的超时计算WWDGWWDG超时和窗口值设定独立看门狗工程WWDG工程 WDG简介 WDG看门狗(Watchdog Timer)是一种常见的硬件设备,在STM32F10系列中,有两种看门狗,分别是独立看门狗和窗口看门狗&#x…

Contextual Transformer Networks for Visual Recognition

Contextual Transformer Networks for Visual Recognition 1. 摘要2. 目的3. 网络设计 代码地址 1. 摘要 Transformer with self-attention has led to the revolutionizing of natural language processing field, and recently inspires the emergence of Transformer-style …

基于VUE的图书借阅管理系统的设计与实现

目录 一、摘要 二、技术描述 三、部分截图 四、获取方式 一、摘要 随着我国经济的高速发展,人们对图书的需求也愈发旺盛,而传统图书管理模式存在以下弊端:信息存储和分类操作不够高效,导致查找书籍困难;借还书流程…

Floorplanning with Graph Attention

Floorplanning with Graph Attention DAC ’22 目录 Floorplanning with Graph Attention摘要1.简介2.相关工作3.问题公式化4. FLORA的方法4.1 解决方案概述4.2 C-谱聚类算法 4.3 基于GAT的模型4.4 合成训练数据集生成 摘要 布图规划一直是一个关键的物理设计任务&#xff0…

基于SSM的网络安全宣传网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

笔训【day4】

目录 选择题 1、进制 格式 2、 数组名在&和sizeof后,表数组本身 3、求二维数组某元素地址 ​编辑 ​编辑 4、x x & (x-1) 二进制位1的个数 ​编辑 5、斐波那契递归次数 编程题 1、计算糖果 2、进制转换 选择题 1、进制 格式 十进制转二进制就除…

python sqlalchemy(ORM)- 01 简单使用

[doc] 简介 sqlalchemy 是python操作sql数据库的工具,是一个对象关系映射的框架;在python中提供高效、高性能的数据库访问,企业级的数据持久化模式;pypi 地址sqlalchemy官网 sqlalchemy架构 sql操作是独立于ORM操作的&#xf…

Hydra参数

kali的hyda参数 参数: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns][-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT] -R 继续从上一次进度接着破解。 -S 采用SSL链接。 -s PORT 可通…

Outlook屏蔽Jira AI提醒

前言:最近不知道为什么jira上的ai小助手抽风,一周发个几千封邮件…导致我现在都不想在邮箱里面跟找垃圾一样找消息了。实在忍无可忍,决定屏蔽AI小助手,方法很简单,follow me~~ 第一步:双击打开电脑版Outloo…

iOS 面试题以及自我理解答案

1、简述push原理,push的证书和其他的有什么不一样? 第 一阶段:BeejiveIM服务器把要发送的消息、目的iPhone的标识打包,发给APNS。 第二阶段:APNS在自身的已注册Push服务 的iPhone列表中,查找有相应标识的iP…

vue3 组件v-model绑定props里的值,修改组件的值要触发回调

很早之前就写了&#xff0c;一直没写篇博客记录下 <select v-model"typeVal" />const emit defineEmits([update:type]); const props defineProps({type: { type: String, default: }, });const typeVal computed({get() {return props.type;},set(value…

Docker系列--镜像和容器备份与恢复的方法

原文网址&#xff1a;Docker系列--镜像和容器备份与恢复的方法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍备份和恢复Docker镜像与容器的方法。 命令对比 保存与导出 docker save&#xff1a;保存的是镜像&#xff08;image&#xff09;。&#xff08;保存的是分层的…

关于:未同意隐私政策,应用获取ANDROID ID问题

一、环境 Unity2018 4.21f1、Android Studio、Windows10 二、问题描述 我在提交华为应用时&#xff0c;总是提示【未同意隐私政策&#xff0c;应用获取ANDROID ID个人信息】&#xff0c;但是我已经全部去掉了&#xff0c;后面问了人工客服&#xff0c;反馈了如下信息 调用堆…

【数据库——MySQL(实战项目1)】(2)图书借阅系统——数据库测试、视图以及存储过程

目录 1. 简述2. 数据表 增、删、改 测试2.1 借阅人表2.2 图书表2.3 借阅信息表 3. 功能代码3.1 创建视图显示所有逾期未归还的借阅信息&#xff08;包括借阅人姓名&#xff0c;借阅人类别&#xff0c;书名&#xff0c;借出日期&#xff0c;应归还日期&#xff0c;逾期时长&…

简单聊聊低代码

在数字经济迅速发展的背景下&#xff0c;越来越多的企业开始建立健全业务系统、应用、借助数字化工具提升管理效率&#xff0c;驱动业务发展&#xff0c;促进业绩增长。在这一过程中&#xff0c;和许多新技术一样&#xff0c;低代码&#xff08;Low-code&#xff09;开发被推上…

各种业务场景调用API代理的API接口教程

API代理的API接口在各种业务场景中具有广泛的应用&#xff0c;本文将介绍哪些业务场景可以使用API代理的API接口&#xff0c;并提供详细的调用教程和代码演示&#xff0c;同时&#xff0c;我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用API…

分布式系统开发技术中的CAP定理原理

分布式系统开发技术中的CAP定理原理 在分布式系统开发中&#xff0c;CAP定理&#xff08;一致性、可用性和分区容忍性&#xff09;是指导我们设计、开发和维护系统的核心原理。该定理阐述了分布式系统中一致性、可用性和扩展性之间无法同时满足的矛盾关系&#xff0c;为我们提…

沪深300期权一个点多少钱?

经中国证监会批准&#xff0c;深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约&#xff0c;下文介绍沪深300期权一个点多少钱?本文来自&#xff1a;期权酱 一、沪深300期权涨…