【java】java虚拟机JVM

 类加载器(Class Loader)

负责将类的字节码加载到内存中,并生成相应的 Class 对象。类加载器通常采用委托模型,根据特定的加载规则从不同的位置加载类,如本地文件系统、网络等。

运行时数据区

方法区(Method Area)

 Java堆(Java Heap)

Java虚拟机栈(Java Virtual Machine Stacks)

本地方法栈(Native Method Stack)

堆vs栈

Java中,堆(Heap)主要用于存储对象实例,而栈(Stack)则用于存储方法的局部变量和调用信息。

堆(Heap):堆是JVM管理的最大的一块内存空间,主要用于存放通过new操作符创建的对象和数组。堆内存是由垃圾回收器(Garbage Collector)自动管理的,不需要程序员手动干预。在Java程序运行过程中,不断有新的对象被创建并分配到堆上,同时也会有不再使用的对象被垃圾回收器回收以释放空间。

栈(Stack):栈也称为虚拟机栈,它是每个线程私有的内存区域,用于存放该线程执行的方法调用(方法帧)以及方法中的局部变量。每当一个方法被调用时,JVM会在当前线程的栈中创建一个栈帧,用来保存方法的局部变量表、操作数栈、动态链接和方法返回地址等信息。当方法执行完毕,对应的栈帧就会被销毁。

 程序计数器(Program Counter Register)

垃圾回收机制

在Java中,垃圾回收机制是JVM的一个核心功能,它允许程序员不需要手动管理内存释放。这一机制确保了对象在不再被引用时能够被自动回收,从而避免内存泄漏。以下是垃圾回收机制的关键要点:

垃圾回收线程

JVM内部有一个专门的垃圾回收线程,它的优先级较低,通常在系统空闲或堆内存不足时才会触发执行。

对象可达性分析

垃圾回收器会定期进行可达性分析,以确定哪些对象不再被任何活动的线程引用,这些对象被认为是垃圾,可以被回收。

垃圾回收算法

标记-清除(Mark and Sweep)

复制(Copying)

标记-整理(Mark and Compact)

垃圾回收器

不同的JVM实现可能提供不同的垃圾回收器,例如HotSpot JVM就有多个垃圾回收器可供选择,包括Serial、Parallel、CMS和G1等。

性能监控与调优

在处理内存溢出、内存泄漏或进行程序性能调优时,可能需要对垃圾回收机制进行监控和调节。这可以通过JVM提供的监控工具和参数来实现。

内存泄露

内存泄露在Java中主要指的是程序中存在一些不再使用的对象,但这些对象的内存却没有被及时释放,导致程序的内存占用持续增加。

导致内存泄露的情况:

长生命周期对象持有短生命周期对象的引用:如果长生命周期对象(如静态变量)持有短生命周期对象的引用,并且没有及时释放这个引用,那么短生命周期对象的内存就无法被垃圾回收器回收。

静态集合对象未及时清理:静态集合如果一直被引用而不进行清理,它们所包含的对象也将无法被垃圾回收器回收,从而导致内存泄露。

资源未关闭:在使用数据库连接、文件流、网络连接等资源时,如果在不再需要这些资源时没有及时关闭它们,也会导致内存泄露。

监听器未注销:在使用监听器(如事件监听器)时,如果没有及时取消注册或注销监听器,这也可能导致内存泄露,因为这些监听器对象会一直被事件源持有引用。

内存溢出

Java虚拟机内存溢出(OutOfMemoryError)是指在程序运行过程中,由于内存分配不足或内存管理不当导致无法再分配足够的内存给新的对象,从而导致程序无法继续正常执行的情况。

导致内存溢出的情况:

堆内存溢出:堆是Java虚拟机用于存储对象实例和数组等动态分配内存的区域。当程序创建了大量对象,而无法及时进行垃圾回收时,堆内存可能会耗尽,导致OutOfMemoryError。

方法区内存溢出:方法区用于存储类的结构信息、常量、静态变量等数据。当应用程序动态加载大量类或者运行时产生大量的常量字符串时,方法区可能会耗尽内存,导致OutOfMemoryError。在Java 8及之前的版本中,方法区内存溢出通常被称为永久代溢出(PermGen Space),而在Java 8及之后的版本中使用了元空间(Metaspace)代替永久代。

栈内存溢出:每个线程在运行时都会创建一个虚拟机栈,用于存储方法的局部变量、操作数栈等信息。如果栈的深度超过了虚拟机所允许的最大深度,就会导致栈内存溢出。

本地方法栈溢出:与虚拟机栈类似,本地方法栈用于执行本地方法。如果本地方法的递归调用层次太深,就会导致本地方法栈溢出。

直接内存溢出:直接内存是通过NIO(New I/O)引入的一种机制,它允许Java程序直接在堆外分配内存。如果程序频繁地分配大量的直接内存,而又没有及时释放,就可能导致直接内存溢出。

垃圾收集器

执行引擎(Execution Engine)

负责执行 Java 字节码。执行引擎通常包括解释器和即时编译器(Just-In-Time Compiler,JIT Compiler)。解释器逐行解释字节码并执行,而即时编译器则将字节码编译成本地机器码,提高程序的执行效率。

本地方法接口(Native Method Interface)

允许Java应用程序调用本地方法库(Native Library),与底层操作系统和硬件交互。

本地方法库(Native Library)

包含了一组与操作系统相关的本地方法实现,可以由Java应用程序调用。

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

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

相关文章

张老师语录

1. 写文章要点 (1)整体文章的必须有题目 (2)必须要有问题描述 (3)一个文档中的定义是连续的 (4)在定义中的一些参数符号,不要直接赋值,而是在实验中进行说明 …

yolov8安全帽检测项目开发(python开发,带有训练模型,可以重新训练,并有Pyqt5界面可视化)

不需要程序,只需要数据集的,想自己搭建模型训练的,可以免费下载(积分已经设置为0):https://download.csdn.net/download/qq_40840797/89100918 1.项目介绍:(视频运行链接&#xff1…

小米SU7会是年轻人第一台“保时米”吗?

2021年3月30日,小米创始人雷军在公开演讲中宣布造车,称 “小米汽车将是我人生中最后一次重大的创业项目,我愿意押上我人生所有积累的战绩和声誉,为小米汽车而战!” 雷军表示未来十年,小米将投入100亿美元造…

AI创业项目--个性化旅游规划助手

一个集合了最新人工智能技术、用户界面友好、并且高度个性化的旅行规划工具。它能够理解并预测用户的偏好和需求,提供量身定制的旅行建议和完整的旅游计划。以下是这个产品可能包含的特点和功能: 用户界面(UI)和用户体验&#xf…

YOLOV8注意力改进方法:DilateFormer多尺度空洞 Transformer(附改进代码)

原论文地址:原论文下载地址 即插即用的多尺度全局注意力机制 本文提出了一种新颖的多尺度空洞 Transformer,简称DilateFormer,以用于视觉识别任务。原有的 ViT 模型在计算复杂性和感受野大小之间的权衡上存在矛盾。众所周知,ViT…

socket之UDP组播(多播)

组播也可以称之为多播这也是 UDP 的特性之一。组播是主机间一对多的通讯模式,是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址,组播地址不同于单播地址,它并不属于特定某个主机&#xff0c…

测试必备:网站崩溃原因大揭秘!12种常见问题一网打尽

网站崩溃是研发团队最怕看到的情况,但是由于种种原因却时常出现,作为测试人员,我们更应该比一般人了解网站崩溃的原因及排查方法,这是我们测试工作的重要一环。接下来我就谈谈12种常见的网站崩溃原因以及如何跟踪和解决它们。 你的…

【JavaWeb】Day33.MySQL概述

什么是数据库 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 像我们日常访问的电商网站京东,企业内部的管理系统OA、ERP、CRM这类的系统,以及大家每天都会刷的头条、抖音类的app,那这些大家所…

【LangChain学习之旅】—(19)BabyAGI:根据气候变化自动制定鲜花存储策略

【LangChain学习之旅】—(19)BabyAGI:根据气候变化自动制定鲜花存储策略 AutoGPTBaby AGIHuggingGPTLangChain 目前是将基于 CAMEL 框架的代理定义为 Simulation Agents(模拟代理)。这种代理在模拟环境中进行角色扮演,试图模拟特定场景或行为,而不是在真实世界中完成具体…

黑马Seata入门到实战教程(学习笔记)

Seata CAP理论 BASE理论 XA AT TCC sage模式 缺点:数据隔离性安全问题 四种模式对比

智慧乡村建设探索:数字乡村引领农村发展新方向

目录 一、智慧乡村建设的内涵与意义 二、数字乡村的发展现状 三、数字乡村引领农村发展的新方向 (一)推动农业现代化,提升农业生产效率 (二)培育农村新业态,促进农村产业升级 (三&#xf…

SpringCloud Alibaba @SentinelResource 注解

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第十五篇,即介绍 SpringCloud Alibaba 的 SentinelResource 注解。 二、简介 这个注解用于标…

解析《天道》中丁元英的五步商业运作思路

我国商战题材的电视剧中哪部最为经典?小马识途营销顾问认为那一定是《天道》,《天道》对人物的刻画非常精准,对人性的描写鞭辟入里,看过之后都会被其震撼,因此它不仅是一部电视剧,更是一部可以给人们带来商…

Python中的Cookie和Session详解

在Web开发中,Cookie和Session是两个非常重要的概念,它们用于处理用户的状态信息。本文将详细介绍Python中的Cookie和Session的概念、作用以及如何在Python中使用它们。 一、什么是Cookie? Cookie是一种由服务器保存在浏览器端的键值对数据&…

Databend 开源周报第 138 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 支持多表插入 …

位运算-201. 数字范围按位与,137. 只出现一次的数字 II(总结此类)

给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4 示例 2: 输入&…

鸿蒙ArkUI开发实战:制作一个【简单计数器】

构建第一个页面 使用文本组件 工程同步完成后,在 Project 窗口,点击 entry > src > main > ets > pages ,打开 Index.ets 文件,可以看到页面由 Row 、 Column 、 Text 组件组成。 index.ets 文件的示例如下&#xff1…

基于java+springboot+vue实现的健身房管理系统(文末源码+Lw)23-223

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装健身房管理系统软件来发挥其高效地信息处理的作用&#xf…

移动端h5 js手势封装

原文 https://blog.csdn.net/qq_43248623/article/details/115300072 这里对原代码做了一点小小的优化,做了个封装 // 手势封装 const handlerSwiper (domClass, cb) > {const dom document.querySelector(domClass)var startx, starty;//获得角度function ge…

测开面经(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件,编写以下测试脚本 import pytest import requests# 测试用例1:验证登录成功的情况 # 第一个测试用例验证登录成功的情况,发送有效的用户名和密…