2024最新最全【JVM进阶】教程,零基础入门到精通

news2024/11/25 15:33:04

目录

  • 1.栈
    • 1-1.栈帧
    • 1-2.栈帧的组成
  • 2.堆
    • 2-1.对象的组成
  • 3.本地方法栈
  • 4.程序计数器
  • 5.方法区
  • <font color="red">如<font color="orange">果<font color="#FFEB05">你<font color="green">也<font color="skyblue">想<font color="blue">学<font color="purple">习<font color="black">:黑客&网络安全
  • 在这里领取:
  • 这个是我花了几天几夜自整理的<font color="red">最新最全网安学习资料包<font color="red"><font color="black">免费共享给你们,其中包含以下东西:
  • 1.学习路线&职业规划
  • 2.全套体系课&入门到精通
  • 3.黑客电子书&面试资料

在这里插入图片描述

1.栈

栈是连续的空间,先进后出,从技术上说,栈就是CPU寄存器里的某个指针所指向的一片内存区域。这里所说的“某个指针”通常位于x86/x64平台的ESP寄存器/RSP寄存器,以及ARM平台的SP寄存器。

栈会给每个线程都分配一个栈帧,java中8大基本类型和对象的引用都是在栈内存中分配,在栈里同名值是共享内存的,比如:

int a=3;
int b=3;//a,b指向的是同一个"3",但是和对象的引用不同,改变a的值并不会影响b
a=4;//使a=4,如果栈里面没有"4",那就会重新创一个"4"

对象的引用一旦调用了new关键字,他就会在堆内存开辟一个存储空间。

Person person;//这个person就是对象的引用
person = new Person();//这里用new关键字,在堆里面给实例对象分配一块内存

1-1.栈帧

栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。

压栈和弹栈:就是入栈和出栈

1-2.栈帧的组成

之前看过一篇文章总结的很好,下面附上超链接:栈帧

2.堆

1.Java中所有对象的存储空间都是在堆中分配的,简单来说就是:
引用在栈,实例在堆,下面用一个常见的例子来说明

String str = "haha";
String str1 = "haha";
String str2 = new String("haha");
String str3 = new String("haha");
str == str1;//true
str == str2;//false
str2 == str3;//false

上面的str和str1没有使用new创建对象,"haha"属于常量,在常量池,共用一个“haha”,同一块空间
str2和str3都用了new关键字,开辟了两块空间,所以是不同的对象。

2.一个JVM只有一个堆内存,堆内存的大小是可以调节的,堆存储的全是对象

2-1.对象的组成

而对象在内存中的存储布局分为三部分:

A.对象头
java里面用两个字来表示对象头,一个是Mark Word,一个是Klass pointer(Class MetaData Address)

(1)Mark Word(包含了自身运行时数据)
包括锁状态(lock,bkased_lock等),hashcode,GC分代年龄(age),线程持有的锁等… …

(2)Klass pointer(就是一个指针)
虚拟机通过这个指针来确定对象是哪个类的实例

64位虚拟机的对象组成(有锁无锁):
image-20210917143214445

B.实例数据
就是你在类里面写的东西

C.对齐填充
JVM要求对象起始地址必须是8字节的整数倍(8字节对齐),所以不够8字节就由这部分来补充。
3.堆内存分为三个区域:

  1. 新生代(发生Minor GC)新生代采取淘汰机制,活不下去的就被轻GC回收

    ​ (1)伊甸园:
    梦开始的地方,这个区域人满了,大家就要进行Minor GC,活下来的去幸存区

    (2)幸存区:
    幸存区分为两块,from区和to区。那为什么要分为两块呢?

    因为在新生代会发生 Minor GC(轻度垃圾回收),15次回收还没有淘汰的会进入老年代,进行 Full GC(重度垃圾回收),而Full GC花费的时间和资源是远大于Minor GC的,因此我们将幸存区分为两块,在from和to之间用 四大算法 中的复制来进行筛选机制。

    新创建的对象一般会被分配到伊甸区,经过一次Minor GC后,如果对象还存活,就会被移到Survivor区。from区的对象如果继续存活,且能够被另一块幸存区to区容纳,则使用复制算法将这些仍然存活的的对象复制到另一块幸存区to区中,然后清理使用过的Eden和from区(下一次分配就从to区开始,to区成为下一次GC的from区),且这些对象的年龄设置为1,以后对象在幸存区每经历一次Minor GC,对象的年龄就会+1,当对象的年龄到达某个阈值的时候,这些对象就会进入老年代。(阈值默认是15,可以通过-XX:MaxTenuringThreshhold来设定对象在新生代在存活的次数)

    ABC经过一次Minor GC还存活进入幸存from区,下次Minor GC幸存者被复制到to区
    然后清空from区,将to区变成新的from区,继续筛选,存活15次的进入老年代。
    

    为什么要进行十五次筛选呢?
    因为对象头采用四个字节来存放GC的信息:二进制1111刚好对应十进制的15.

  2. 老年代(发生Full GC)
    标记清除算法:标记要回收的对象统一回收。
    和标记整理算法:标记要回收的对象,向同一端移动,移出边界的对象。

  3. 永久代(1.8后改为元空间)

    此区域常驻内存,用来存放JDK自身携带的Class对象,Interface元数据,此区域不存在垃圾回收,关闭JVM时永久代自动关闭

    1.6之前:永久代,常量池在5.方法区

    1.7:永久代,常量池在堆中

    1.8:无永久代

3.本地方法栈

Java刚开始的时候底层是用c实现的,后面逐渐演变为新语言Java后,仍然保留了一些c里面的方法,而本地方法区就是用来存这些方法的。这些方法的使用需要Native关键字

4.程序计数器

java中的程序计数器是一块比较小的内存空间,它是当前线程字节码执行的行号指示器。

5.方法区

和堆一样,线程共享,为了和堆区分,也称为非堆

:黑客&网络安全

在这里领取:

在这里插入图片描述

这个是我花了几天几夜自整理的最新最全网安学习资料包免费共享给你们,其中包含以下东西:

1.学习路线&职业规划

在这里插入图片描述
在这里插入图片描述

2.全套体系课&入门到精通

在这里插入图片描述

3.黑客电子书&面试资料

在这里插入图片描述

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

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

相关文章

WT2003H MP3音乐解码语音芯片IC:适应不同应用产品领域的封装形式

随着科技的不断发展&#xff0c;电子设备的应用领域越来越广泛&#xff0c;从消费电子产品到工业控制领域&#xff0c;都需要使用各种不同的芯片来满足不同的功能需求。在这个背景下&#xff0c;WT2003H MP3音乐解码语音芯片IC以其SOP16、SSOP24、QFN32三种封装形式&#xff0c…

有必要给孩子买台灯吗?分享专家都说好的护眼台灯

现在的孩子学业压力确实要比我们以前大很多&#xff0c;不仅增加了许多科目和作业&#xff0c;而且有些家长为了孩子的前途&#xff0c;还会再课外报名一些兴趣班等&#xff0c;这也让孩子们的用眼需求增长了不少。相信细心的家长已经发现了&#xff0c;孩子放学回家后好像太过…

PN协议下,工业交换机之间如何实现自组网无线通信

在实际应用中&#xff0c;车间里控制柜内会有PLC、伺服电机、变频器等设备同时与触摸屏做数据交互&#xff0c;这些设备一般通过工业交换机进行数据组网。总控室内的PC组态软件往往需要采集到&#xff0c;车间内各部分触摸屏、PLC、变频器等设备信号&#xff0c;此时往往是工业…

mysql:查看服务端没有睡眠的线程数量

使用命令show global status like Threads_running;可以查看服务端没有睡眠的线程数量。 例如&#xff1a;

docker学习(十、搭建redis集群,三主三从)

文章目录 一、docker创建6个redis容器创建6个redis容器回顾各个属性含义 二、划分主从&#xff0c;3主3从划分主从查看状态查看节点信息 基础理论在这里有详细描述&#xff1a; docker学习&#xff08;九、分布式存储亿级数据知识&#xff09; 后续redis集群操作&#xff1a; d…

基于博弈树的开源五子棋AI教程[1 位棋盘]

0 引子 常见的五子棋棋盘大小为15x15&#xff0c;最直观的表示就是一个二维数据。本文为了易于拓展一开始使用的是QVector<QVector>的数据&#xff0c;但是在分支因子为10的情况下只能搜索到4层左右&#xff0c;后面深度加深&#xff0c;搜索时间呈指数倍数增长。这种实…

.Net Attribute 什么是特性、预定义特性使用(一)

什么是特性&#xff1f; 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面…

Zabbix 中开启报表服务

要在 Zabbix 中开启报表服务并安装必要的组件&#xff0c;您需要按照以下步骤操作&#xff1a; 1. 修改 Zabbix Server 配置 编辑 Zabbix Server 配置文件&#xff1a; vim /etc/zabbix/zabbix_server.conf在文件中找到以下两个参数并进行修改&#xff1a; StartReportWrit…

MLX vs MPS vs CUDA:苹果新机器学习框架的基准测试

如果你是一个Mac用户和一个深度学习爱好者&#xff0c;你可能希望在某些时候Mac可以处理一些重型模型。苹果刚刚发布了MLX&#xff0c;一个在苹果芯片上高效运行机器学习模型的框架。 最近在PyTorch 1.12中引入MPS后端已经是一个大胆的步骤&#xff0c;但随着MLX的宣布&#x…

Catboost算法助力乳腺癌预测:Shap值解析关键预测因素

一、引言 乳腺癌是一种常见的恶性肿瘤&#xff0c;对女性健康和生命造成严重威胁。乳腺癌的预测和治疗是当前研究的热点和难点。传统的预测方法主要基于临床病理学特征&#xff0c;但准确率有待提高。随着机器学习技术的发展&#xff0c;数据驱动的预测方法逐渐受到关注。Catbo…

ChatGPT如何计算token数?

GPT 不是适用于某一门语言的大型语言模型&#xff0c;它适用于几乎所有流行的自然语言。所以 GPT 的 token 需要 兼容 几乎人类的所有自然语言&#xff0c;那意味着 GPT 有一个非常全的 token 词汇表&#xff0c;它能表达出所有人类的自然语言。如何实现这个目的呢&#xff1f;…

EDI能够为企业间信息传输带来哪些帮助?

EDI全称电子数据交换&#xff0c;它的历史可以追溯到 1960 年代&#xff0c;从供应链和物流到医疗保健和金融都可以看到EDI的身影&#xff0c;没有任何行业限制。尽管EDI技术已经在国外得到广泛使用&#xff0c;国内自研EDI软件产品也已有十余年的历史&#xff0c;但国内目前的…

大数据----33.hbase中的shell文件操作

HBase的命令行工具&#xff0c;最简单的接口&#xff0c;适合HBase管理使用&#xff0c;可以使用shell命令来查询HBase中数据的详细情况。 注意&#xff1a;如果进入hbase后长时间不操作&#xff1b; 发生hbase自动关闭没有了进程&#xff1b; 原因是内存不够&#xff1b;可以关…

leetCode算法—11. 盛最多水的容器

11.给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 难度&#xff1a;中等 ** 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#x…

Deap 框架细节介绍

创建一个 gp.PrimitiveSet 对象&#xff0c;对象名为 MAIN&#xff0c;自变量为 3 pset gp.PrimitiveSet("MAIN", 3) print(pset)<deap.gp.PrimitiveSet object at 0x000001FBE182AB20>gp.py&#xff08;均为产生函数集与节点集&#xff09; PrimitiveSet …

State of PostgreSQL 2023 报告解读

基于 PostgreSQL 内核的时序数据库厂商 Timescale 发布了一年一度的 State of Postgres 2023 报告。 Timescale 介绍 简单先介绍一下 Timescale 这家公司的历史。它最早是提供了一个 PG 的插件&#xff0c;引入了 Hypertable 这个概念&#xff0c;来高效地处理时序数据&…

分享一个项目——Sambert UI 声音克隆

文章目录 前言一、运行ipynb二、数据标注三、训练四、生成总结 前言 原教程视频 项目链接 运行一个ipynb&#xff0c;就可操作 总共四步 1&#xff09;运行ipynb 2&#xff09;数据标注 3&#xff09;训练 4&#xff09;生成 一、运行ipynb 等运行完毕后&#xff0c;获得该…

mt5和mt4交易软件有什么区别?

MetaTrader 4&#xff08;MT4&#xff09;和MetaTrader 5&#xff08;MT5&#xff09;是两种广泛使用的外汇和金融市场交易平台&#xff0c;由MetaQuotes公司开发。尽管它们都是外汇交易的常见选择&#xff0c;但在功能和特性上存在一些区别。以下是MT4和MT5之间的主要区别&…

2023 英特尔On技术创新大会直播 |我感受到的“芯”魅力

文章目录 每日一句正能量前言AI时代&#xff0c;云与PC结合为用户带来更好体验全新处理器&#xff0c;首次引入针对人工智能加速的NPU大模型时代&#xff0c;软硬结合带来更好训练成果后记 每日一句正能量 成长是一条必走的路路上我们伤痛在所难免。 前言 在2023年的英特尔On技…

Go语言HTTP编程入门指南

如果你是一名开发者&#xff0c;那么你一定听说过Go语言。Go&#xff0c;也被称为Golang&#xff0c;是由Google开发的一种静态类型、编译型语言。它的设计理念是“简单、快速、高效”&#xff0c;这使得Go语言在许多方面都表现出色&#xff0c;尤其是在网络编程和并发编程方面…