【实战JVM】-基础篇-03-Java内存结构

【实战JVM】-基础篇-03-Java内存结构

  • 1 运行时数据区
    • 1.1 总览
    • 1.2 程序计数器
      • 1.2.1 是否会内存溢出
    • 1.3 java虚拟机栈
      • 1.3.1 栈帧的组成
        • 1.3.1.1 局部变量表
        • 1.3.1.2 操作数栈
        • 1.3.1.3 帧数据
          • 1.3.1.3.1 动态链接
          • 1.3.1.3.2 方法出口
          • 1.3.1.3.3 异常表
      • 1.3.2 是否会内存溢出
      • 1.3.3 设置虚拟机栈大小
        • 1.3.3.1 注意事项
    • 1.4 本地方法栈
    • 1.5 堆
      • 1.5.1 是否会内存溢出
      • 1.5.2 Java堆
        • 1.5.2.1 Arthas查看堆内存
        • 1.5.2.2 默认参数
    • 1.6 方法区
      • 1.6.1 元信息
      • 1.6.2 运行时常量池
      • 1.6.3 字符串常量池
      • 1.6.4 神奇的intern
      • 1.6.5 方法区实现
      • 1.6.6 是否会内存溢出
      • 1.6.7 静态变量的存储
    • 1.7 直接内存


1 运行时数据区

运行时数据区负责管理jvm使用到的内存,比如创建对象和销毁对象。

1.1 总览

在这里插入图片描述

在这里插入图片描述

1.2 程序计数器

在这里插入图片描述

在这里插入图片描述

1.2.1 是否会内存溢出

在这里插入图片描述

简单来说,PC计数器就两个作用:

  • 对于单线程环境,保存下一条需要执行的指令的内存地址。
  • 对于进程来说,用于保存上下文信息,方便切换。

1.3 java虚拟机栈

在这里插入图片描述

1.3.1 栈帧的组成

在这里插入图片描述

1.3.1.1 局部变量表

在这里插入图片描述

在这里插入图片描述

  • 起始PC:表示根据字节码哪一行可以使用该局部变量
    • i就是在0、1之后完成初始化,234可以使用,所以长度是3,j就是1

在这里插入图片描述

在这里插入图片描述

静态方法的局部变量表不包括自己this,而实例方法中的局部变量表存放着this,局部变量也会占用槽

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.3.1.2 操作数栈

在这里插入图片描述

1.3.1.3 帧数据
1.3.1.3.1 动态链接

在这里插入图片描述

1.3.1.3.2 方法出口

在这里插入图片描述

1.3.1.3.3 异常表

在这里插入图片描述

1.3.2 是否会内存溢出

在这里插入图片描述

在这里插入图片描述

1.3.3 设置虚拟机栈大小

在这里插入图片描述

1.3.3.1 注意事项

在这里插入图片描述

1.4 本地方法栈

在这里插入图片描述

1.5 堆

在这里插入图片描述

成员变量存放于中,局部变量存放于中(由局部变量表维护)。

jdk8之前,静态变量存放在方法区中,jdk8之后,静态变量存放在中。

堆是线程共享的,所以针对需要多线程使用的环境,可以将变量变为静态变量以达到我们的需求。

1.5.1 是否会内存溢出

在这里插入图片描述

1.5.2 Java堆

在这里插入图片描述

1.5.2.1 Arthas查看堆内存
dashboard -i 刷新频率(毫秒)

查看堆内存used、total、max

在这里插入图片描述

1.5.2.2 默认参数

如果不设置默认参数,默认max是系统内存的1/4,total默认是系统内存的1/64。

在这里插入图片描述

建议将-Xmx和-Xms设置为相同的值,这样在程序启动之后可使用的总内存就是最大内存,而无需向java虚拟机再次申请,减少了申请并分配内存时间上的开销们也不会出现内存过剩之后,堆收缩的情况。

在这里插入图片描述

1.6 方法区

在这里插入图片描述

1.6.1 元信息

在这里插入图片描述

1.6.2 运行时常量池

解析阶段将常量池中的符号引用替换为直接引用

在这里插入图片描述

1.6.3 字符串常量池

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.6.4 神奇的intern

在这里插入图片描述

jdk6

在这里插入图片描述

jdk7之后

在这里插入图片描述

主要是因为jdk7之后,字符串常量池是在堆中的,而方法区是在永久代里的;jdk8字符串常量池是在堆中的,而方法区是在元空间里的。

1.6.5 方法区实现

在这里插入图片描述

在这里插入图片描述

1.6.6 是否会内存溢出

在这里插入图片描述

没有过高要求设置256M即可,但是元空间一定要设置。

1.6.7 静态变量的存储

在这里插入图片描述

1.7 直接内存

方法区是放在元空间中,属于操作系统中的直接内存。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Day50 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结

代码随想录算法训练营Day50 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结 LeetCode 309.最佳买卖股票时机含冷冻期 题目链接:LeetCode 309.最佳买卖股票时机含冷冻期 思路: 四个状态。 保持持有股票,保持卖出股票…

Ardupilot开源飞控之FollowMe计划

Ardupilot开源飞控之FollowMe计划 1. 源由2. 分析3. 计划4. 话题5. 设备6. 后续 1. 源由 随着现在的智能设备越来越智能,FollowMe就是一个最基本的特性。(注:远程遥控,传感联动,这些都是最基本的自动化控制技术&#…

【神经网络结构可视化】使用 Visualkeras 可视化 Keras / TensorFlow 神经网络结构

文章目录 Visualkeras介绍下载安装代码示例1、导入必要的库2、创建VGG16神经网络模型3、可视化神经网络结构4、完整代码5、使用教程 可视化自己创建的神经网络结构1、导入要的库2、创建自己的神经网络模型3、可视化神经网络结构图4、完整代码 Visualkeras介绍 Visualkeras是一…

C++代码错误解决1(函数模板)

1、代码如下 //示例函数模板的使用 #include <iostream> #include <string> using namespace std; template <typename T>//函数模板 T max(T a,T b) {return a>b?a:b; } int main() {int a,b;cout<<"input two integers to a&b:"…

【微机原理及接口技术】可编程并行接口芯片8255A

【微机原理及接口技术】可编程并行接口芯片8255A 文章目录 【微机原理及接口技术】可编程并行接口芯片8255A前言一、8255A的内部结构和引脚1.与外设接口&#xff08;数据端口&#xff09;2.与处理器接口 二、8255A的工作方式三、8255A的编程1. 写入方式控制字&#xff1a;控制字…

从0开始回顾ElasticSearch

1 elasticsearch概述 1.1 elasticsearch简介 官网: https://www.elastic.co/ ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的…

【动手学强化学习】第 6 章 Dyna-Q 算法知识点总结

【动手学强化学习】第 6 章 Dyna-Q 算法知识点总结 本章知识点基于模型的强化学习与无模型的强化学习方法简介无模型的强化学习方法基于模型的强化学习方法 强化学习算法的评价指标Dyna-Q算法Dyna-Q 算法的具体流程Dyna-Q 代码实践 本章知识点 基于模型的强化学习与无模型的强…

C++语言·list链表

其实现在在讲这些容器的时候&#xff0c;我们的重点已经不是它的接口都有什么&#xff0c;功能都是什么了&#xff0c;这些内容官网上都能查到&#xff0c;而且容器和容器之间接口的不同处很少&#xff0c;我在讲解的话也只是把官网上的东西截图下来复述一下。现在的重点其实都…

AtCoder Regular Contest 178 A~D

A.Good Permutation 2&#xff08;贪心&#xff09; 题意&#xff1a; 给你一个正整数 N N N和一个由 M M M个正整数 A ( A 1 , A 2 , … , A M ) A(A_{1},A_{2}, \dots,A_{M}) A(A1​,A2​,…,AM​)组成的序列。 在这里&#xff0c; A A A的所有元素都是介于 1 1 1和 N N …

【多线程】深入理解一个thread pool

我发现很多博客没有系统的分析过一个线程池&#xff0c; 那么我今天就基于这个github的小例子&#xff0c;彻底的逐行学习一下https://github.com/progschj/ThreadPool主函数调用解析&#xff1a; cpp的主函数比较简单&#xff0c; 创建了一个4个线程的线程池&#xff0c; 然后…

python中使用(.)来进行相对路径访问文件

在Python中&#xff0c;使用相对路径访问文件是一种常见的做法&#xff0c;尤其是在处理与脚本位于同一目录或附近目录的文件时。相对路径是基于当前工作目录&#xff08;CWD, Current Working Directory&#xff09;的&#xff0c;即执行Python脚本时所在的目录。 1.当前目录…

网络编程-TCP

一、TCP的相关IP 1.1 SeverSocket 这是Socket类,对应到网卡,但是这个类只能给服务器使用. 1.2 Socket 对应到网卡,既可以给服务器使用,又可以给客户端使用. TCP是面向字节流的,传输的基本单位是字节. TCP是有连接的,和打电话一样,需要客户端拨号,服务器来听. 服务器的内核…

如何保护主机的安全

因为主机的安全涉及到保护主机的数据存储和处理的保密性、完整性和可用性。但是当主机一旦被攻击者入侵&#xff0c;那么企业将会面临多种安全风险&#xff0c;比如业务被中断、服务器不稳定和数据被窃取等风险&#xff0c;那么我们该怎样保护主机的安全呢? 对于提高主机的安全…

Stream流的使用

目录 一&#xff0c;Stream流 1.1 概述 1.2 Stream代码示例 二&#xff0c;Stream流的使用 2.1 数据准备 2.2 创建流对象 2.3 中间操作 filter map distinct sorted limit skip flatMap 2.4 终结操作 foreach count max&min collect 2.5 查找与匹配 a…

redis中String,Hash类型用法与场景使用

String 用法 1. 设置键值对 &#xff08;1&#xff09;设置键值对使用 set 命令设置 key 的值。 返回值&#xff1a;ok&#xff0c;如果 key 已经存在&#xff0c;set 命令会覆盖旧值。 &#xff08;2&#xff09;使用 setex 命令设置 key 的值并为其设置过期时间&#xff…

应用爬山算法做文本数据的挖掘和分析

爬山算法是一种启发式搜索算法&#xff0c;用于求解优化问题。它从一个初始解开始&#xff0c;逐步通过比较当前解与其邻域解的优劣来选择下一个可能更优的解&#xff0c;直到达到一个局部最优解或者无法进一步改进为止。爬山算法的核心思想是“贪心”&#xff0c;即每一步都选…

安全设计 | CISA:构建不可侵犯的代码,软件安全设计的未来之路

软件制造商在产品设计和开发过程中应采取安全设计原则和方法&#xff0c;以减少网络安全风险&#xff0c;并转变责任重心&#xff0c;使产品在设计时就内置安全特性&#xff0c;而不是依赖于后期的补丁和修复。为此CISA发布了《软件安全设计的原则和方法》&#xff0c;帮助软件…

兵器室管控系统|DW-306是一套成熟系统

概述 智慧兵器室管理系统&#xff08;DW-S306&#xff09;是依托互3D技术、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 本解决方案利用现有内部网络&#xff0c;部署部队智能兵器室管理系统&#xff…

【Java】欸...?我学集合框架?真的假的?

【Java】欸…&#xff1f;我学集合框架&#xff1f;真的假的&#xff1f; Java集合框架 概述 Java集合框架主要由以下几个部分组成&#xff1a; 接口&#xff08;Interfaces&#xff09;&#xff1a;定义了集合的基本操作&#xff0c;如添加、删除、遍历等。实现&#xff0…