2-23 switch、JVM内存模型、垃圾回收机制、this、static、变量的分类

文章目录

  • switch 实现成绩评级
  • JVM内存模型概念
    • 栈的特点
    • 堆的特点
  • 垃圾回收机制
    • 通用的分代垃圾回收机制
      • 三种清理算法
      • 垃圾回收过程
      • 垃圾回收常见的两种检测引用算法
      • 内存泄露常见原因
  • this的用法
    • 创建对象的四步
  • static 静态
    • 特点
  • 变量的分类和作用域
  • import

switch 实现成绩评级

image.png
switch的特性每次只能比较一个整数,难道要一个一个处理么?
可以使用求余,反正成绩个位数不影响评级

switch ((int)grade/10){
    case 10:
    case 9:
        System.out.println("优秀");
        break;
    case 8:
        System.out.println("良好");
        break;
    case 7:
        System.out.println("中等");
        break;
    case 6:
        System.out.println("及格");
        break;
    default:
        System.out.println("不及格");
}

JVM内存模型概念

栈的特点

  1. 每一个线程都会对应一个栈,但是所有线程共享一个堆和方法区
  2. 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧
  3. 栈属于线程私有,无法实现线程间的共享
  4. 栈由系统自动分配,速度快、内存空间连续

堆的特点

  1. 堆用于存储创建好的对象和数组(数组也是对象)
  2. JVM只有一个堆,被所有线程共享
  3. 堆存储空间不连续,灵活但速度慢
  4. 堆被所有线程所共享,在堆上的区域会被垃圾回收期做进一步划分

垃圾回收机制

  1. 内存管理很大程度上是指中对象的管理
  2. 垃圾回收机制回收的是没有任何变量引用的对象,有引用的对象即使长时间没有调用也不会回收

通用的分代垃圾回收机制

image.png

  • 年轻代——存放刚刚new过的对象
  • 年老代——Eden满以后会触发一次Minor GC 清理无用对象,将有用对象复制到年老代,年老代中的存储对象会不停循环,转移区块存储,当循环次数超过15次时会转移到年老代进行存储
  • 永久代——Java8后换了名字,但是他的功能是一直都有的

分代垃圾回收,是基于这样一个事实,不同对象的生命周期不同
Full GC用于清理年老代,年轻代。JVM调优中,很大的工作就是Full GC的调节
Minor GC清理年轻代 ,Major GC清理年老代
程序员无权调用垃圾回收器,即使程序员显示调用,也只是申请,不是一定执行(System.gc()

三种清理算法

  1. Minor GC清理年轻代区域
  2. Major GC清理老年代区域
  3. Full GC清理老年代、年轻代、永久代。成本高,会对系统性能产生影响

垃圾回收过程

发现垃圾 -> 回收垃圾

垃圾回收常见的两种检测引用算法

  • 引用计数法
  • 根搜索法

内存泄露常见原因

  1. 大量拼接字符串时,使用了String而不是StringBuilder
String str = "";
for(int i=0;i < 10000;i++){
    str += i;//相当于产生了10000个String对象
}
  1. HashMap、Vector、List的使用
  2. IO流对象、数据库连接对象、网络连接对象未关闭
  3. 监听器使用不当

this的用法

创建对象的四步

  1. 分配对象空间,并将对象成员变量初始化

  2. 执行属性值的显式初始化

  3. 执行构造方法

  4. 返回对象的地址给相关的变量

  5. this()调用重载的构造方法(非默认)。但是只能在构造方法中使用,并且必须位于构造方法的第一句

  6. this 不能用于static方法中

static 静态

静态变量、静态方法生命周期和类相同

特点

  1. 为该类的公用变量,属于类,被该类的所有实例共享,在类载入时被初始化
  2. static成员变量只有一份
  3. 一般用“类名.变量名/方法名”来调用
  4. 在static方法中不可直接访问非static的成员(可能此时类还没有被实例化)

变量的分类和作用域

  • 局部变量——属于方法
  • 成员变量——属于对象
  • 静态变量——属于类

import

  1. Java默认会导入java.lang包下的所有类
  2. java.xxx.*会导入该包下所有的类,会延长编译时间但是不会降低运行速度
  3. 引入同名类时,只能写包名全路径
  4. cn.jiacn.jia.jia只是在逻辑上看起来有关系,其实是两个完全独立的包
  5. 静态导入 import static java.lang.Math.*这样可以直接使用该包的静态属性和静态方法。比如之前使用π需要 Math.PI 但是现在只需 PI

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

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

相关文章

windows安装git(全网最详细,保姆教程)

1.下载git&#xff08;windows版本&#xff09; 官网下载&#xff1a;Git - Downloads 点进去后&#xff0c;进入如下界面 2.安装git &#xff08;1&#xff09;找到下载到的文件&#xff0c;进行双击进行安装 &#xff08;2&#xff09;这里是安装前的使用说明&#xff0c; …

抖音博主老隋分享的temu蓝海项目怎么做更好?

很多网友在讨论老隋分享的temu蓝海项目&#xff0c;恰巧我也是通过抖音知道的这个项目&#xff0c;经过前段时间的系统学习temu的知识&#xff0c;加上我自己也是干过电商相关的工作&#xff0c;理解起来比较容易&#xff0c;下面我就用本文详细介绍一下抖音博主老隋分享的temu…

2024年2月22日 Go生态洞察:强化切片上的通用函数

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a;…

【人工智能高频面试题--基础篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;人工智能高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 人工智能高频面试题 1.什么是人工智能&#xff1f;什么是人工智能神经网络&#xff1f;2.解释…

力扣 724. 寻找数组的中心下标

思路&#xff1a; 创建两个变量sum和sum1&#xff0c;sum代表左边元素的和&#xff0c;sum1代表右边元素的和 然后假设从数组下标0开始&#xff0c;一直到最后一个作为中心下标 如果sumsum1&#xff0c;返回此时的中心下标 如果所有下标循环完了&#xff0c;发现没有return…

F,B,Alpha Matting

https://huggingface.co/spaces/leonelhs/FBA-Mattinghttps://huggingface.co/spaces/leonelhs/FBA-Matting1.introduction matte细节要比分割多很多&#xff0c;大多数几种在增加编码器-解码器架构的分辨能力上&#xff0c;本文的特点在于同时计算alpha&#xff0c;F&#xff…

软件工程复习笔记

一、软件工程概述 软件 = 程序 + 数据 + 相关文档 软件危机(Software Crisis) 指由于落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 软件工程三要素 方法、工具、过程 软件工程目标 在给定成本、进度的…

Linux部署前后端分离项目

目录 一、jdk安装 二、tomcat安装 三、MySQL安装 四、nginx安装 五、配置多个tomcat负载&#xff0c;部署后端项目 六、前端部署 一、jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 2. 解压安装包 这里需要解压到usr/loc…

用一行代码在几秒钟内抓取任何网站

如果你正在寻找最强大的 Python 抓取工具&#xff1f;不要再看了&#xff01;这一行代码将帮助你立即启动并运行。 Scrapeasy Scrapeasy 是一个 Python 库&#xff0c;可以轻松抓取网页并从中提取数据。它可用于从单个页面抓取数据或从多个页面抓取数据。它还可用于从 PDF 和…

【串口工具实战】关于USB转TTL工具的推荐

好的工具使用不但可以提高工作效率而且能够带来稳定性 一、更新日志 2024/02/26 A1.0 初稿 二、前言 以前&#xff1a;USB转TTL这东西有什么讲头不就是个数据转换模组集成 现在&#xff1a;你说的都对&#xff0c;对对对 结论&#xff1a;USB转TTL工具的推荐 作为下载…

软考37-上午题-【数据库】-数据模型、数据库的三级模式和二级映像

一、考情简介 上午题&#xff1a;6分——6道选择题 下午题&#xff1a;15分——一道分析题 E-R图、关系模式&#xff1a;下午考试必考&#xff01;&#xff01;&#xff01;&#xff08;编制也要考&#xff01;&#xff09; 二、数据模型 数据模型是对现实世界数据特征的抽象…

vue项目的前端工程化思路webpack(持续更新中)

写在前面&#xff1a;现在的前端网页功能丰富&#xff0c;特别是SPA&#xff08;single page web application 单页应用&#xff09;技术流行后&#xff0c;JavaScript的复杂度增加和需要一大堆依赖包&#xff0c;还需要解决Scss&#xff0c;Less……新增样式的扩展写法的编译工…

什么是Dapp

什么是Dapp Dapp&#xff08;去中心化应用&#xff09;程序的后端代码&#xff08;智能合约&#xff09;运行在一个去中心化的网络上&#xff0c;而非中心化的服务器。他们使用以太坊区块链网络作为数据存储端&#xff0c;并且用智能合约实现app的业务逻辑。 特点 智能合约&am…

【C语言】linux内核__netdev_start_xmit函数

一、中文注释 // 这是一个内联函数&#xff0c;用于启动网络设备的数据包发送流程。 // 它通过网络设备操作集&#xff08;net_device_ops&#xff09;指定的特定函数 // 来启动给定数据包的发送。// ops: 指向包含网络设备操作函数的结构体的指针 // skb: 指向要发送的套接字…

2024年大路灯无广测评推荐:书客、柏曼、霍尼韦尔大路灯哪个品牌更好?

临近开学&#xff0c;护眼大路灯哪个品牌好的话题度在不断提高&#xff01; 有人说大路灯是“智商税”&#xff0c;但也有人说“学生党福音”、“照明神器”&#xff0c;吸引了大量人群的关注。在没用过大路灯之前我也很担心在担心是否是智商税的问题&#xff0c;直到我自己入…

AIGC实战——扩散模型(Diffusion Model)

AIGC实战——扩散模型 0. 前言1. 去噪扩散概率模型1.1 Flowers 数据集1.2 正向扩散过程1.3 重参数化技巧1.4 扩散规划1.5 逆向扩散过程 2. U-Net 去噪模型2.1 U-Net 架构2.2 正弦嵌入2.3 ResidualBlock2.4 DownBlocks 和 UpBlocks 3. 训练扩散模型4. 去噪扩散概率模型的采样5. …

伪原创一键生成软件:为你创作有价值的文章

伪原创一键生成软件是一种现代写手必备的得力助手。无论您是写作新手还是经验丰富的老手&#xff0c;它都能帮助您快速生成有吸引力的文章&#xff0c;让您在竞争激烈的市场中脱颖而出。伪原创一键生成软件是一款让写作变得轻松且高效的神奇工具。它为写手们节省了大量的时间和…

智慧公厕:让城市更智慧、更环保

在现代社会&#xff0c;智慧公厕作为城市管理的重要一环&#xff0c;是智慧城市的重要组成部分&#xff0c;其建设的价值十出突出&#xff0c;是公共厕所信息化升级改造的核心方案。如智慧公厕源头厂家广州中期科技有限公司&#xff0c;所自主研发的智慧公厕整体解决方案&#…

自动驾驶---行业发展及就业环境杂谈

进入21世纪以来&#xff0c;自动驾驶行业有着飞速的发展&#xff0c;自动驾驶技术&#xff08;L2---L3&#xff09;也逐渐落地量产到寻常百姓家。虽然最早期量产FSD的特斯拉有着深厚的技术积累&#xff0c;但是进入2010年以后&#xff0c;国内的公司也逐渐发展起来自己的自动驾…

Attention注意力机制

1. 背景 1.1. 变长序列 1.2. 序列的输出格式 每个向量对应一个标签&#xff0c;如词性标注整个序列输出一个标签&#xff0c;如情感分析(Sentiment Analysis)由模型决定输出的标签个数&#xff0c;这种任务称为Seq2seq任务 1.3. 序列标注 使用全连接的方式&#xff0c;没办法…