百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗

yuyutoo 2024-10-23 16:41 227 浏览 0 评论

目录:

[干货] JAVA - JVM - 1 JVM一套带走

[干货] JAVA - JVM - 2 内存两分

[干货] JAVA - JVM - 3 字符串常量池

[干货] JAVA - JVM - 4 类加载

[干货] JAVA - JVM - 9 内存回收

[干货] JAVA - JVM - 10 内存回收-跟搜索算法

[干货] JAVA - JVM - 11 内存回收-回收策略

[干货] JAVA - JVM - 12 内存回收-跟搜索算法的 HotSpot 实现

[干货] JAVA - JVM - 13 内存回收-HotSopt 的分代策略和收集器

[干货] JAVA - JVM - 14 内存并发- JMM Volatile CAS

[干货] JAVA - JVM - 15 内存并发-Synchronize wait notify


jvm 中内存分两部分,堆外和堆(这里是泛指)。

NativeMemory

名字很多,堆外内存,本地内存,C Heap,直接内存都是它。

  • 管理java heap的状态数据(用于GC);
  • JNI调用,也就是Native Stack;
  • JIT(即时编译器)编译时使用Native Memory,并且JIT的输入(Java字节码)和输出(可执行代码)也都是保存在Native Memory;
  • NIO direct buffer。对于IBM JVM和Hotspot,都可以通过-XX:MaxDirectMemorySize来设置nio直接缓冲区的最大值。默认是64M。超过这个时,会按照32M自动增大。

这里提一句直接内存的释放,释放时只能通过释放直接内存的引用来间接释放。

Heap & Stack

通常大家理解的堆栈。容我dao个图:

每个线程独自使用。

栈内部的部分看图自明,But:HotSpot 中没有本地方法栈,和 JavaStack 在一起。

所有线程共同使用。

堆内部的具体分代结构,后边到回收部分再说。

方法区

名字很多,各种资料中的名字不大相同,大概有这些:方法区、持久区、Method Area 等。

1 Class 元数据和 Class 常量池

各种资料说的很乱(原谅我实在是看不懂 JVM 的源码~~,嗯.... 其实是犯懒,这玩意还用看源码?用用就知道了。),根据我的理解,这俩个东西其实是同一个,本人之后的所有博文有可能不固定的称呼,请诸公理解。

包含两部分:

所有的Literal:字符串、8中基本类型的值、final 的常量

所有的Symbolic References:类的全限定名、字段名称和描述符、方法名称和描述符(包含 public void 和 parameter type,parameter name 在 java8 中也可以放到方法区,那时候就不叫方法区了,叫 MetaSpace,关于变化稍后容禀)。

另外:有人会有疑问,static 的在什么地方?其实这和上边的不冲突,就看是否有 final,如果是 final 的,也是 Literal,如果没有,也是可以赋值的,在 Heap 中。个人见解,欢迎拍砖。

2 String Constant Pool 字符串常量池

zhei 东西不是每个类特有,是所有的类共有。

话说有个 StringTable 是个Map(PS:老程序员喜欢把什么什么 Map 称之为什么什么 Table,比如我~~),初始默认1009,MLGDD。说来话长,赶明我单写一章,或者有想琢磨的可以 google String.intern()。

Java6 中的方法区

  • Class 元数据
  • String Constant Pool 字符串常量池

Java7 中的方法区

String Constant Pool 字符串常量池 从方法区转移到 Java Heap 中。

Java8 中的方法区

删除方法区,新增 MetaSpace

Literal字面量移动到 Java Heap

Symbolic References 移动到 Native Memory

MaxMetaspaceSize 参数调整大小,也可以不指定,如果不指定,jvm 会动态调整。


欢迎拍砖,决绝骂娘

相关推荐

ETCD 故障恢复(etc常见故障)

概述Kubernetes集群外部ETCD节点故障,导致kube-apiserver无法启动。...

在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法

FreeRADIUS为AAARadiusLinux下开源解决方案,DaloRadius为图形化web管理工具。...

如何排查服务器被黑客入侵的迹象(黑客 抓取服务器数据)

---排查服务器是否被黑客入侵需要系统性地检查多个关键点,以下是一份详细的排查指南,包含具体命令、工具和应对策略:---###**一、快速初步检查**####1.**检查异常登录记录**...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

《5 个实用技巧,提升你的服务器安全性,避免被黑客盯上!》

服务器的安全性至关重要,特别是在如今网络攻击频繁的情况下。如果你的服务器存在漏洞,黑客可能会利用这些漏洞进行攻击,甚至窃取数据。今天我们就来聊聊5个实用技巧,帮助你提升服务器的安全性,让你的系统更...

聊聊Spring AI Alibaba的YuQueDocumentReader

序本文主要研究一下SpringAIAlibaba的YuQueDocumentReaderYuQueDocumentReader...

Mac Docker环境,利用Canal实现MySQL同步ES

Canal的使用使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中,并在springboo...

RustDesk:开源远程控制工具的技术架构与全场景部署实战

一、开源远程控制领域的革新者1.1行业痛点与解决方案...

长安汽车一代CS75Plus2020款安装高德地图7.5

不用破解原车机,一代CS75Plus2020款,安装车机版高德地图7.5,有红绿灯读秒!废话不多讲,安装步骤如下:一、在拨号状态输入:在电话拨号界面,输入:*#518200#*(进入安卓设置界面,...

Zookeeper使用详解之常见操作篇(zookeeper ui)

一、Zookeeper的数据结构对于ZooKeeper而言,其存储结构类似于文件系统,也是一个树形目录服务,并通过Key-Value键值对的形式进行数据存储。其中,Key由斜线间隔的路径元素构成。对...

zk源码—4.会话的实现原理一(会话层的基本功能是什么)

大纲1.创建会话...

Zookeeper 可观测性最佳实践(zookeeper能够确保)

Zookeeper介绍ZooKeeper是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群...

服务器密码错误被锁定怎么解决(服务器密码错几次锁)

#服务器密码错误被锁定解决方案当服务器因多次密码错误导致账户被锁定时,可以按照以下步骤进行排查和解决:##一、确认锁定状态###1.检查账户锁定状态(Linux)```bash#查看账户锁定...

zk基础—4.zk实现分布式功能(分布式zk的使用)

大纲1.zk实现数据发布订阅...

《死神魂魄觉醒》卡死问题终极解决方案:从原理到实战的深度解析

在《死神魂魄觉醒》的斩魄刀交锋中,游戏卡死犹如突现的虚圈屏障,阻断玩家与尸魂界的连接。本文将从技术架构、解决方案、预防策略三个维度,深度剖析卡死问题的成因与应对之策,助力玩家突破次元壁障,畅享灵魂共鸣...

取消回复欢迎 发表评论: