网站功能描述与分析/公司网站推广怎么做

网站功能描述与分析,公司网站推广怎么做,网站建设捌金手指花总三十,淘宝联盟 网站怎么做📖前言: 学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分,另一部分就是需要掌握Java内部的工作原理,从编译到运行,到底是谁在帮我们完成工作的? 接下来着重对Java虚拟机,也就…

📖前言:

        学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分,另一部分就是需要掌握Java内部的工作原理,从编译到运行,到底是谁在帮我们完成工作的?

        接下来着重对Java虚拟机,也就是JVM有一个深刻认识,对日后完成项目的开发或是更底层的开发有很大的帮助。

        接下来说的均为个人的一点小见解和观点,希望大家多多指点!

🎈JVM:

        JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。

虚拟机是指通过软件模拟的具有完整硬件功能的、运⾏在⼀个完全隔离的环境中的完整计算机系统。

常⻅的虚拟机:JVM、VMwave、Virtual Box。

JVM 和其他两个虚拟机的区别:
1 .  VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;
2.JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进⾏了裁剪。
JVM 是⼀台被定制过的现实当中不存在的计算机。

🎨JVM与JDK的关系?

        知道JVM的基础概念,可能现在就有点懵了,JVM和JDK有什么关系吗?那么开始梳理一下与JAVA开发相关的组成部分;

✨JDK:

        官方JDK(Java Development Kit) 是Java开发工具包,包含了Java编译器(javac)、Java程序打包工具(jar)、Java程序运行环境(JRE)、文档生成工具(javadoc)以及其他开发工具,如调试的工具(jdb)。JDK是为Java开发人员提供的完整开发环境,包含了开发和运行Java程序所需的一切。

         非官方:JDK就是一个工具包,JDK是JRE的超集,JDK包含了JRE的所有开发,调试和监视应用程序等工具。当要开发Java应用程序时,需要安装JDK.

(JDK里面的工具非常多,是这么多工具才能支撑起我们编写Java程序)

        当然有一个重要的组成部分——JRE(Java程序运行环境).

接下来就针对JRE做一个详细说明:

✨JRE:

        官方JRE(Java Runtime Environment) 是Java运行环境,包含了JVM和Java类库。JRE是运行Java程序所需的环境,它提供了Java程序运行所需的库文件和JVM。因此,如果你只需要运行Java程序,那么只需要安装JRE即可。        

        

需要区分的地方:

        这里再穿插一下IDEA是什么,IDEA是编写代码的平台,里面集成了一些好用的工具,例如预编译工具,能够在出现一些语法错误的时候提示我们,但是起到编译运行的还是JVM虚拟机!

⚽JVM内存模型:        

        首先在开头处需要声明一下: JVM内存模型与JMM内存模型不是一回事,JVM内存模型就是虚拟机内部的内存模型,但是JMM内存模型主是描述Java线程之间如如何工作的,如何做到线程之间共享变量的。

        JVM内存模型分为5个区,由这5个区合力搭建出JVM内存模型的。

程序计数器:记录了要执行的下一条指令的地址

栈:

        虚拟机栈:保存临时变量、参数、函数调用的关系

        本地方法栈:与虚拟机栈类似、底层是C或C++代码

堆:保存了new的对象

方法区(元数据区):保存了静态变量、常量、常量池等

        栈区、程序计数器是线程私有的

        堆区、方法区是线程共享的 

🏉类加载过程:

        了解了JVM内存模型,接下来需要了解.class文件在JVM读取与加载的过程。

        1.加载:读取.class文件中的内容

        2.验证:校验读取到的内容是否符合JVM规范。

        3.准备:为类的静态变量分配内存,并将其初始化为默认值。

        4.解析:将符号引用全部替换为直接引用

        5.初始化:此阶段是执行类构造器()方法的过程。此方法由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并而成。当初始化一个类的时候,如果发现其父类还未进行初始化,则需要先触发其父类的初始化。Java虚拟机会保证一个类的()方法在多线程下被同步加锁。

⚾双亲委派模型:

        在类加载时,需要遵循双亲委派模型:

        如果一个类被请求加载时,首先不会自己加载,将加载的请求抛给父类,如果父类可以加载,自己就不再加载,如果父类不能加载,自己再进行加载。

优先级由高到低:标准库类加载器->扩展库类加载器->第三方库类加载器->自定义类加载器

        如下图:

双亲委派模型作用:       

1. 避免重复加载类: ⽐如 A 类和 B 类都有⼀个⽗类 C 类,那么当 A 启动时就会将 C 类加载起来,那么在 B 类进⾏加载时就不需要在重复加载 C 类了。
2. 安全性 :使⽤双亲委派模型也可以保证了 Java 的核⼼ API 不被篡改,如果没有使⽤双亲委派模型,⽽是每个类加载器加载⾃⼰的话就会出现⼀些问题,⽐如我们编写⼀个称为 java.lang.Object类的话,那么程序运⾏的时候,系统就会出现多个不同的 Object 类,⽽有些 Object 类⼜是用户自己提供的因此安全性就不能得到保证了。

🥎类初始化顺序(带有继承关系):

        父类静态代码块、静态变量->子类静态代码块、静态变量->父类普通变量->父类构造函数->子类普通方法->子类构造方法

🏀GC垃圾回收:

        首先需要搞清楚,哪里的垃圾需要回收,那里的垃圾不需要回收?        

        线程私有的区域中的垃圾我们不需要回收,当线程结束时,这些区域也会跟着清空

        线程共享的区域,如果线程结束,但是线程共享区中的引用对象不会随之消失。

        因此着重关注的是两个区域——堆区、方法区

        但是相较于创建的量和空间的消耗来说,堆区是垃圾回收的重灾区,但是方法区也有垃圾回收机制,但是不怎么关注。

🏐如何判断该对象是否是垃圾?

        如何判定堆区中的对象就是垃圾呢?有以下几种方法:

🍿1.引用计数法:

        采用计数的方式,如何一个对象被引用,此时计数器+1,如何不在引用该对象计数器的值就-1。

造成的问题:

        如果采用方法进行垃圾的判定,会造成"循环引用"的问题,例如:

class Student{private String name;public Student student;public Student(String name) {name = this.name;}
}
public class Test {public void circulation(){Student a = new Student("a");Student b = new Student("b");a.student = b;b.student = a;a = null;b = null;}
}

此时明明a、b两个引用已经断开指向a、b的对象,但是其内部还有相互的指向,没有办法被释放了。

🍕2.可达性分析:

        为了解决上述出现的问题,可以定期进行扫描,如果发现虽然被引用着,但是到达不了GCroots也会被视为垃圾,如下图:

                     

         也就是从GC Roots开始扫描,如果是能到达的对象此时构成了引用链,如果在某个对象在经过下次扫描不在这条引用链上了,就被视为"垃圾"。

   该方法被作为GC垃圾回收的首选方法。但是在这个过程中可能会造成STW(Stop The World),可以理解为时间停顿。

🥯垃圾回收方法:

        通过可达性分析以后判断出哪些对象是垃圾,接下来就来谈一谈这些垃圾是如何被回收的?

有以下方法:

🌭 1.标记回收:

        经过可达性分析以后,如果是垃圾,此时被标记一下。之后经过多轮检测之后,将标记的垃圾进行清除:

        

缺点:

        造成内存碎片化问题,此时在存储效率上会大减折扣。

🧇2.标记整理:

        在标记回收算法的基础上,进行改良,因为上述的做法会造成内存碎片问题,如果每次回收以后,对内存中存活的对象继续宁整理,整理在一起,此时内存空间可利用率会提高。

        

缺点:

        整理复制需要消耗大量的实践,时间效率降低。

🧈3.复制算法:

        如果我么每次将内存空间分为两部分,一部分空出来,另一部分使用,垃圾回收只需要对使用的一部分进行回收,进行标记,经过多轮之后,将存活的对象复制到另一块没有使用的内存当中。

 

缺点:

        如果存活的对象较多,此时复制时比较消耗时间。

🍞4.分代回收算法:

        将堆区中的区域划分为新生代与老年代

 

新生代又被划分为:伊甸区、幸存区

  • 堆内存为两个区:新生代 (Young) 和老年代 (Old);
  • 新生代默认占堆内存的 1/3,老年代默认占堆内存的 2/3;
  • 新生代又分为 Eden 区、Survivor From区、Survivor To区默认比例是 8:1:1   

过程:

        首次被创建的对象先进入伊甸区,之后经过可达性分析与复制算法,将幸存的对象放入幸存区,再次经多轮过可达性分析与复制算法,此时将最终存活的对象放入老年代。老年代中进行可达性分析的频次就比较低了。

😶常见的GC垃圾回收器:

        上述讲的都是一些垃圾回收的一些思路,这些GC垃圾回收器内部回收垃圾时都有用到上述的思路。

1️⃣1.GMS垃圾收集器:

        老年代收集器,并发GC,GMS是一种获取最短停顿时间(STW)为目标的收集器。

实现原理:

        其内部是基于标记-清除算法实现的。(具体大家可以自行了解)

由于整个过程中耗时最⻓的并发标记和并发清除过程收集器线程都可以与⽤⼾线程⼀起⼯作,所以,从总体上来说,CMS收集器的内存回收过程是与⽤⼾线程⼀起并发执⾏的。       

2️⃣2.G1垃圾收集器 :

        全区域的垃圾收集器,其主要的做法是将分代回收算法中的区域划分为更小的区域块,此时不再是一次性进行复制算法回收,只对一部分进行可达性分析+复制算法回收。

年轻代垃圾收集:
        在G1垃圾收集器中,年轻代的垃圾回收过程使⽤复制算法。把Eden区和Survivor区的对象复制到新的Survivor区域。
老年代垃收集:
对于⽼年代上的垃圾收集,G1垃圾收集器也分为4个阶段,基本跟CMS垃圾收集器⼀样,但略有不同:
初始标记 (Initial Mark)阶段 - G1需要暂停应⽤程序的执⾏,它会标记从根对象出发,在根对象的第⼀层孩⼦节点中标记所有可达的对象。但是G1的垃圾收集器的Initial Mark阶段是跟minor gc⼀同发⽣的。也就是说,在G1中,你不⽤像在CMS那样,单独暂停应⽤程序的执⾏来运⾏Initial Mark阶段,而是在G1触发minor gc的时候⼀并将年⽼代上的Initial Mark给做了。
并发标记 (Concurrent Mark)阶段 - 在这个阶段G1做的事情跟CMS⼀样。但G1同时还多做了⼀件事 情,就是如果在Concurrent Mark阶段中,发现哪些Tenured region中对象的存活率很⼩或者基本没有对象存活,那么G1就会在这个阶段将其回收掉,⽽不⽤等到后⾯的clean up阶段。这也是Garbage First名字的由来。同时,在该阶段,G1会计算每个 region的对象存活率,⽅便后⾯的clean up阶段使⽤ 。
最终标记 (CMS中的Remark阶段) - 在这个阶段G1做的事情跟CMS⼀样, 但是采⽤的算法不同,G1采⽤⼀种叫做SATB(snapshot-at-the-begining)的算法能够在Remark阶段更快的标记可达对象。
筛选回收( Clean up/Copy)阶段 - 在G1中,没有CMS中对应的Sweep阶段。相反 它有⼀个Cleanup/Copy阶段,在这个阶段中,G1会挑选出那些对象存活率低的region进⾏回收,这个阶段也是和minor gc⼀同发⽣的。

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

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

相关文章

【无标题】大亚湾文化体育场多美啊。

请推荐一些常用并且免费的,可直接在线运行【Python】代码的平台并列出对应网址 好的,用户想让我推荐一些常用且免费的、可以直接在线运行Python代码的平台,并且需要列出对应的网址。我需要先回想一下自己知道的在线Python运行环境&#xff0…

权限提升—Windows权限提升土豆家族溢出漏洞通杀全系

前言 OK,Java安全更新不下去了,实在是太难啦啊,想起来提权这一块没怎么更新过,接下来都主要是更新提权这一块的文章了,Java安全的话以后有耐心再搞了。 手动提权 今天主要是讲这个手动的提权,手动提权相…

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…

禾赛盈利了,但激光雷达没有胜利

还远没有到激光雷达党欢呼的时候。 3月,随着禾赛科技公布2024年报,全世界第一家也是唯一一家实现全年盈利的激光雷达上市公司诞生,为了这个盈利目标,禾赛科技奋斗了十年。 但极大的出货量和不高的盈利水平,让禾赛科技…

关于金碟K3,禁用和启用需要流程审批后执行

真是难受,是设计师蠢呢自己问题比较多呢,现在都还没有弄好 点击禁用和启用,通过流程来执行 到底是蠢呢还是设计问题,搞了半日没有效果,搞那么复杂! 而且有样板都没有草鞋成功 BOS设计,表单属性,操作列表: 1、启用禁用流程

导入 Excel 规则批量修改或删除 PDF 文档内容

需要对 PDF 文档内容进行修改的时候,通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候,有什么方法可以帮我们实现批量操作呢?今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…

msyql--基本操作之运维篇

检查 root 用户的权限 查看该用户针对这个数据库的权限 -- 如果在终端连接mysql时需要 mysql -u root -p -- 查看用户权限 SELECT user, host FROM mysql.user WHERE user root;可以看的出来root有他的访问权限,如过没有localhost或者% 说明没有访问权限 添加…

云计算:探索现代科技的未来之云

文章目录 云计算基本概念云计算是什么注意 云计算的价值云计算的部署模式云计算的服务模式主流的云计算技术AWS简介AWS建立了广阔的合作伙伴生态 VMware简介VMware服务介绍 华为云简介华为云Stack模式 云计算基本概念 云计算是什么 云计算是一种模型,它可以实现随时…

STM32蜂鸣器播放音乐

STM32蜂鸣器播放音乐 STM32蜂鸣器播放音乐 Do, Re, Mi, Fa, 1. 功能概述 本系统基于STM32F7系列微控制器,实现了以下功能: 通过7个按键控制蜂鸣器发声,按键对应不同的音符。每个按键对应一个音符(Do, Re, Mi, Fa, Sol, La, Si&a…

网络地址转换技术(2)

NAT的配置方法: (一)静态NAT的配置方法 进入接口视图配置NAT转换规则 Nat static global 公网地址 inside 私网地址 内网终端PC2(192.168.20.2/24)与公网路由器AR1的G0/0/1(11.22.33.1/24)做…

【Linux网络-多路转接select】

代码:https://gitee.com/nanyi-c/linux/tree/master/day50 一、I/O多路转接之select 1.初始select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的程序会停在select这里等待,直到被…

2025 年中国家电零售与创新趋势解析:以旧换新国补激活需求,AI 技术渗透至研发、供应链、营销

一、产业环境:政策驱动与技术变革下的挑战与机遇 在全球经济波动与国内消费转型的双重背景下,中国家电产业正经历前所未有的变革。2024 年,家电行业面临的 “三座大山”—— 短期消费信心低迷、中期房地产降温、长期人口下行压力 —— 持续施…

【大模型基础_毛玉仁】4.1 参数高效微调简介

目录 4 参数高效微调4.1 参数高效微调简介4.1.1 下游任务适配1)上下文学习(In-context learning)2)指令微调(Instruction Tuning) 4.1.2 参数高效微调4.1.3 参数高效微调的优势 4 参数高效微调 大语言模型…

Postman使用02、断点、fiddler弱网测试

脚本操作 一、脚本导出 1.导出json脚本 2.打包json文件 3.下载的文件 二 .导入脚本 1.选择文件 2.点击导入 3.导入的接口 三.多接口运行 1.集合右键,点击run ,运行多个接口 2.编辑环境,集合,执行次数等 3.运行多个接口 四.运行…

MySQL 调优:查询慢除了索引还能因为什么?

文章目录 情况一:连接数过小情况二:Buffer Pool 太小 MySQL 查询慢除了索引还能因为什么?MySQL 查询慢,我们一般也会想到是因为索引,但除了索引还有哪些原因会导致数据库查询变慢呢? 以下以 MySQL 中一条 S…

【操作系统】进程三种状态?进程间状态的切换?挂起态?

进程状态 进程的五种(三种)状态: 新建(New):进程刚被创建,尚未加入到就绪队列;就绪(Ready):进程已获得除CPU外的所有资源,等待被调度执…

计算机控制系统的最小拍控制器设计及仿真分析

1题目 开环传递函数 G(s) 2/(s(0.5s1)) ,采样周期 T0.5 秒,设计单位速度输入下的最小拍控制器 1.1 方法1 根据课本中的步骤,最小拍控制器的设计步骤如下: 1. 确定对象的离散传递函数G(z),并确定其零极点。 2. 确定…

哈希--哈希桶

哈希桶是哈希表(散列表)中的一个概念,是哈希表数组中的每个元素 ,用于存储键值对数据。它有以下特点和相关要点: 结构与原理:哈希表底层常由数组构成,数组的每个元素即哈希桶。通过哈希函数计算…

Linux多线程详解

Linux多线程详解 一、Linux多线程概念1.1 什么是线程1.2 进程和线程1.3 进程的多个线程共享1.4 进程和线程的关系 二、Linux线程控制2.1 POSIX线程库2.2 线程创建2.3 获取线程ID pthread_self2.4 线程等待pthread_join2.5 线程终止2.6 线程栈 && pthread_t2.7 线程的局…

多路转接Poll

在之前我们讲过select是最古老的多路转接方案,古老就意味着他不是很方便使用,他需要用户手动保存fd_set这个位图结构,来表示读写事件的关注与否或者就绪性。 而且由于fd_set的大小是固定的,这就意味着他能管理的套接字文件描述符是…