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

目录

  • 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.黑客电子书&面试资料

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android应用-Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解

文章目录 Dismissible 简介使用场景常用属性基本用法举例注意事项 Dismissible 简介 Dismissible 是 Flutter 中用于实现可滑动删除或拖拽操作的一个有用的小部件。主要用于在用户对列表项或任何其他可滑动的元素执行删除或拖动操作时&#xff0c;提供一种简便的实现方式。 使…

【flink番外篇】5、flink的window(介绍、分类、函数及Tumbling、Sliding、session窗口应用)介绍及示例 - 完整版

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

文件的基本管理

目录 一、Linux系统目录结构和相对/绝对路径 &#xff08;一&#xff09;系统目录结构 &#xff08;二&#xff09;相对路径和绝对路径 1.绝对路径 2.相对路径 &#xff08;三&#xff09;通配符的作用 二、创建、复制、删除文件&#xff0c;rm -rf /意外事故 &#xf…

2022年智能算法之凌日搜索算法(TS),原理公式详解,附matlab代码

凌日搜索算法&#xff08;Transit Search&#xff0c;TS&#xff09;是一种新型元启发式优化算法&#xff0c;该算法基于著名的系外行星探测方法&#xff0c;具有寻优能力强、进化能力强、搜索速度快的特点。该成果于2022年发表在知名SCI期刊Results in Control and Optimizati…

最强的AI视频去码图片修复模型:CodeFormer

1 CodeFormer介绍 1.1 CodeFormer解决的问题 CodeFormer是由南洋理工大学-商汤科技联合研究中心S-Lab在NeurIPS 2022上提出的一种基于VQGANTransformer的人脸复原模型。该方法基于预训练VQGAN离散码本空间&#xff0c;改变复原任务的固有范式&#xff0c;将人脸复原任务转成C…

Zookeeper-集群架构

Zookeeper集群架构 集群角色 Leader&#xff1a; 领导者 事务请求&#xff08;写操作&#xff09;的唯一调度者和处理者&#xff0c;保证集群事务处理的顺序性&#xff1b;集群内部各个服务器的调度者。对于create、setData、delete等有写操作的请求&#xff0c;则要统一转发…

Leetcode—46.全排列【中等】

2023每日刷题&#xff08;六十六&#xff09; Leetcode—46.全排列 算法思想 对于排列来说&#xff0c;我们需要考虑数字之间的相对顺序&#xff0c;不同的相对顺序会产生不同的排列方式。此外&#xff0c;序列中的每个数字一定存在于每个排列当中。因此&#xff0c;不能依次…

【学习笔记】Java函数式编程02——Stream流

文章目录 三、Stream流3.1 概述3.2 快速入门3.2.1 数据准备3.2.2 场景练习3.2.2.1 场景一、遍历所有作家并打印:star:使用stream()流的forEach方法 3.2.2.2 场景二、打印所以年龄小于18的作家名字&#xff0c;并且注意去重:star:distinct()方法:star:filter()方法 3.2.2.3 场景…

【数据结构和算法】定长子串中元音的最大数目

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 方法二&#xff1a;滑动窗口优化版 三、代码 3.1 方法一&#xf…

Python-基于fastapi实现SSE流式返回(类似GPT)

最近在做大模型对话相关功能&#xff0c;需要将对话内容流式返回给前端页面&#xff08;类似GPT的效果&#xff09;。下面直接说下如何实现&#xff1a; 1.首先导入fastapi和sse流式返回所需要的包 from fastapi import APIRouter, Response, status from sse_starlette.sse …

【数据结构和算法】子数组最大平均数 I

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 滑动窗口含义 2.2 滑动窗口一般解法 2.3 方法一&#xff1a;滑动窗口 三、代码 3.1 方法一&#…

数据挖掘体系介绍

数据挖掘是什么&#xff1f; 简而言之&#xff0c;对数据进行挖掘&#xff0c;从中提取出有效的信息。一般我们会把这种信息通过概念、规则、规律、模式等有组织的方式展示出来&#xff0c;形成所谓的知识。特别是在这个大数据时代&#xff0c;当数据多到一定程度&#xff0c;…

Jenkins 执行远程脚本的插件—SSH2 Easy

SSH2 Easy 是什么&#xff1f; SSH2 Easy 是一个 Jenkins 插件&#xff0c;它用于在 Jenkins 构建过程中通过 SSH2 协议与远程服务器进行交互。通过该插件&#xff0c;用户可以在 Jenkins 的构建过程中执行远程命令、上传或下载文件、管理远程服务器等操作。 以下是 SSH2 Eas…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表)

一、模型user对象>和数据库的字段关联 & 自动生成 【其中涉及删除表数据&#xff0c;一切又从零开始】 二、模型user对象>和数据库的字段关联 2.1在model文件夹下&#xff0c;新建 user对象 2.1.1 概念 大家可以想象我们现在的数据是存储在数据库里的&…

HOT 100 最难的题居然是游戏厂的最爱

写在前面 翻看 网易 历年笔面题单的时候&#xff0c;发现一道有意思的题目。 该题评论区&#xff0c;网易 的踪影很少&#xff0c;反而被那些在 4399 笔试中遇到的同学所攻陷&#xff1a; 好嘛&#xff0c;所以这道题还是「游戏厂」的最爱&#xff1f;&#xff01;&#x1f923…

Ubuntu 常用命令之 fdisk 命令用法介绍

fdisk 是一个用于处理磁盘分区的命令行工具,它在 Linux 系统中广泛使用。fdisk 命令可以创建、删除、更改、复制和显示硬盘分区,以及更改硬盘的分区 ID。 fdisk 命令的常用参数如下 -l:列出所有分区表-b:设置扇区大小,如果不设置,默认为 512 字节-u:改变显示/输入单位-…

亚马逊鲲鹏系统引爆广告点击率提升秘籍

在竞争激烈的电商市场&#xff0c;提高广告点击率成为各大卖家争相追求的目标。而如今&#xff0c;亚马逊鲲鹏系统的强大功能再次为卖家们打开了广告优化的新大门。其中&#xff0c;搜索广告功能更是成为提高关键词排名的利器。本文将详细介绍如何通过亚马逊鲲鹏系统实现点击广…

全球知名的五款JavaScript混淆加密工具详解

​ 现在市场上有很多好用的混淆加密工具&#xff0c;其中一些比较流行且受欢迎的工具包括&#xff1a; 1、UglifyJS&#xff08;罗马尼亚&#xff09;&#xff1a;UglifyJS是一个非常流行的 JavaScript工具库&#xff0c;它可以压缩、混淆、美化和格式化 JavaScript 代码。使用…

A01、关于jvm执行子系统

1、Class 类文件结构 1.1、Java跨平台的基础 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码&#xff08;ByteCode&#xff09;是构成平台无关性的基石&#xff0c;也是语言无关性的基础。Java虚拟机不和包括Java在内的任何语言绑定&#xff0c;它只与 “…

新三板炒股开户需要满足哪些条件?交易规则有哪些?

新三板是全国中小企业股份转让系统&#xff0c;属于场外市场&#xff0c;不能满足在主板上市的中小企业就可以申请在新三板挂牌交易。 一、新三板开通条件 新三板分为2个层级&#xff1a; 创新层&#xff1a;开通前10个交易日日均资产100万及以上&#xff0c;两年的股票交易经…