Day4-1 反射、可变变量、线程池和Tomcat调优

2023-11-18

反射

# Class的三种获取方式
# 方式一:通过Class.forName获取
Class cla1 = Class.forName("<类名>");

# 方式二:通过类属性 <类名>.class获取
Class cla2 = <类名>.class;

# 方式三:通过对象方法 <对象>.getClass()
Class cla3 = <对象>.getClass();

可变变量

        到J2SE 1.4为止,一直无法在Java程序里定义实参个数可变的方法——因为Java要求实参(Arguments)和形参(Parameters)的数量和类型都必须逐一匹配,而形参的数目是在定义方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的版本,但是这仍然不能达到让实参数量任意变化的目的。然而,有些方法的语义要求它们必须能接受个数可变的实参——例如著名的main方法,就需要能接受所有的命令行参数为实参,而命令行参数的数目,事先根本无法确定下来。对于这个问题,传统上一般是采用“利用一个数组来包裹要传递的实参”的做法来应付。

1. 用数组包裹实参

        “用数组包裹实参”的做法可以分成三步:首先,为这个方法定义一个数组型的参数;然后在调用时,生成一个包含了所有要传递的实参的数组;最后,把这个数组作为一个实参传递过去。这种做法可以有效的达到“让方法可以接受个数可变的参数”的目的,只是调用时的形式不够简单。J2SE 1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。

Varargs的含义

        大体说来,“Varargs”是“variable number of arguments”的意思。有时候也被简单的称为“variable arguments”,不过因为这一种叫法没有说明是什么东西可变,所以意义稍微有点模糊。

2. 定义实参个数可变的方法

        只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”(即“...”,英文里的句中省略号),就可以让它和不确定个实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。

清单1:一个实参个数可变的方法

private static int sumUp(int... values) {
}

        注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里只能有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。

清单2:实参个数可变的方法的秘密形态

private static int sumUp(int[] values) {
}

        由于存在着这样的转化,所以不能再为这个类定义一个和转化后的方法签名一致的方法。

清单3:会导致编译错误的组合

private static int sumUp(int... values) {
}
private static int sumUp(int[] values) {
}

3. 调用实参个数可变的方法

        只要把要传递的实参逐一写到相应的位置上,就可以调用一个实参个数可变的方法。不需要其它的步骤。

清单4:可以传递若干个实参

sumUp(1, 3, 5, 7);

        在背地里,编译器会把这种调用过程转化为用“数组包裹实参”的形式:

清单5:偷偷出现的数组创建

sumUp(new int[]{1, 2, 3, 4});

        另外,这里说的“不确定个”也包括零个,所以这样的调用也是合乎情理的:

清单6:也可以传递零个实参

sumUp();

         这种调用方法被编译器秘密转化之后的效果,则等同于这样:

清单7:零实参对应空数组

sumUp(new int[]{});

        注意这时传递过去的是一个空数组,而不是null。这样就可以采取统一的形式来处理,而不必检测到底属于哪种情况。

 

线程池技术

 

Tomcat调优

1.内存调优:修改bin/catalina.sh文件中的JAVA_OPTS参数,主要是–Xms和-Xmx的值

2.线程池调优:conf/server.xml

当内存不足时,系统会触发垃圾回收机制(GC),可能也会导致CPU过载。因此当CPU过高时,应考虑是否由内存引起的。

Tomcat问题排查

1.开启startup.bat后一闪而过,末尾加pause打印log显示没有设置JAVA_HOME和JRE_HOME环境变量。

解决方案:必须设置JAVA_HOME和JRE_HOME。若设置后启动仍然提示设置环境变量,则直接在startup.bat开头加入

set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181
set JRE_HOME=C:\Program Files\Java\jre1.8.0_181

2.启动后控制台显示的log有中文乱码。

解决方案:在conf/logging.properties文件中设置java.util.logging.ConsoleHandler.encoding = GBK

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Day4-1 反射、可变变量、线程池和Tomcat调优 的相关文章

  • PHP定时任务脚本模板带日志记录

  • 超市商品信息管理系统/超市管理系统的设计与实现

    摘 要 随着现在网络的快速发展 网上管理系统也逐渐快速发展起来 网上管理模式很快融入到了许多国家的之中 随之就产生了 超市商品信息管理系统 这样就让超市商品信息管理系统更加方便简单 对于本超市商品信息管理系统的设计来说 系统开发主要是采用j
  • 【线性代数】第一章 1.3逆矩阵

    上一篇 1 2 高斯消元法与矩阵的初等变换 目录 一 逆矩阵的概念与性质 二 用行初等变换求逆矩阵 一 逆矩阵的概念与性质 前面我们定义了矩阵的加法 减法和乘法三种运算 自然的 欲在矩阵中引入类似于除法的概念 其关键在于引入类似于倒数的概念
  • STM32入门之GPIO详解

    一 GPIO基础知识 大家在做单片机相关项目开发时候 相信大家拿到板子的第一件事就是点亮开发板上的LED指示灯 也就是说我们第一件事就是对单片机的IO口进行操作 不管是51单片机还是32单片机亦或是arduino 我们想要控制一个最基本的外
  • Markdown编辑器【写作技巧】

    CSDN的MD编辑器 写作技巧 0 Markdown的公式编辑技巧 单个公式用 begin equation 多行公式 begin align 或者 begin array 1 在线LaTeX公式的编辑器 2 继续补充 color Oran
  • 【转】OCaml基础知识

    出自 http www nirvanastudio org ocaml the basics of ocaml html 注释 OCaml的注释是用 and 来分隔的 如下 这是一个单行注释 这是一个 多行 注释 换句话说 注释的方式和原始
  • 求最大公约数的快速算法

    stein 算法求最大公约数 和欧基里德算法相比 效果更好 主要思想如下 化归思想 1 m为奇数时 1 n也为奇数 gcd m n gcd m n 2 m n 2 2 n为偶数 gcd m n gcd m n 2 2 m为偶数时 1 n也为
  • 【Python】批量修改图片文件名和xml文件信息

    在使用tensorflow进行数据训练时 由于原图片文件名较繁琐 且由于根据原图片名生成的xml标签文件中生成了包含filename的标签属性 不利于后期测试训练效果 故通过Python代码对图片名和xml文件信息进行批量修改为由0开始的顺
  • std::thread使用

    C 11新特性 http www cnblogs com pzhfei archive 2013 03 02 CPP new feature html section 7 1 C 11新特性学习笔记 http blog csdn net h
  • java path环境变量_Windows下PATH等环境变量详解

    在学习JAVA的过程中 涉及到多个环境变量 environment variable 的概念 如PATH 正确地配置这些环境变量 是能够顺利学习 开发的前提 而经常出现的问题是 有的学习者能够按照提示一步一步地正确配置 但时间一长就忘了 出
  • HTML对字体的操作详解

    摘自 HTML对字体的所有操作详解 经典 作者 HeroKern 发布时间 2016 01 31 21 15 31 网址 https blog csdn net qq 21792169 article details 50615919 ut
  • shell脚本二:条件语句和多路分支语句

    1 条件语句 bin bash if ne 1 then echo usage 0 filename exit fi if e 1 then echo 1 not exist exit fi if d 1 then echo 1 is a
  • 服务器备案新增网站,已经备案服务器 增加新域名

    已经备案服务器 增加新域名 内容精选 换一换 网站的访问与域名的状态 域名实名认证状态 网站备案状态 解析是否生效 网站网络环境等多个环节有关系 在这些环节中 任意一个环节出现问题 都会导致网站无法访问 查询域名注册信息 检查域名是否过期
  • 为什么HashMap使用红黑树而不使用AVL树

    在Jdk1 8版本后 Java对HashMap做了改进 在链表长度大于8的时候 将后面的数据存在红黑树中 以加快检索速度 那么很多人就有疑问为什么是使用红黑树而不是AVL树 AVL树是完全平衡二叉树阿 最主要的一点是 在CurrentHas
  • Java线程安全问题原因及解决方案

    文章目录 一 出现线程安全问题的原因 二 如何解决 总结 一 出现线程安全问题的原因 出现线程安全问题的原因主要有五个方面 操作系统对线程的调度是随机的 抢占式 主要原因 多个线程修改同一个变量 修改操作不是原子的 内存可见性问题 指令重排
  • windows安装wget的方法

    wget是一个非常好用的下载利器 用法比较简单 wget可以递归且支持断点 安装方法 1 进入网址 GNU Wget 1 21 3 for Windows eternallybored org 下载适合的最新版的 exe文件 2 将下载好的
  • UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

    在做文本词频统计的时候遇到的问题 弄了1个小时也没找到解决方法 在偶然的一次试一试 居然成功解决了这个问题 一般情况下是这样是可以直接没问题的 出现问题时 一般情况下解决方式 网上绝大部分 但是出现这种情况 此时我们输入encoding 1

随机推荐

  • 用proxyee-down快速下载百度网盘大文件

    百度网盘下载大文件一直是一个痛点 现在国内基本上只有百度网盘可用了 但是免费用户使用百度网盘下载东西的速度一直不是很理想 所以现在有很多工具应运而生 今天要介绍的就是一个使用java编写的开源多线程下载器 利用它 我们就可以满速下载百度云文
  • bzoj3309 DZY Loves Math

    题目描述 bz 题解 线性筛 瞎jb反演得到 ans sum limits T 1 a lfloor frac a T rfloor lfloor frac b T rfloor sum limits d T f d mu frac T d
  • Java应用程序浏览器集成控件JxBrowser v7.18新版发布!

    JxBrowser是将基于Chromium的浏览器与Java应用程序集成 以处理和显示HTML5 CSS3 JavaScript Flash等 近日 JxBrowser v7 18发布啦 在此版本中 支持带有 Apple Silicon M
  • 分解质因数、求因子数和因子和(唯一分解定理)

    唯一分解定理 又称算术基本定理 可以描述为 任意一个大于1的正整数都能表示成若干个质数的乘积 且表示的方法是唯一的 换句话说 一个数能被唯一地分解成质因数的乘积 公式 因子数
  • 难懂?这样理解SPI与CAN很简单!

    难懂 这样理解SPI与CAN很简单 什么是串行通讯 为什么仍需使用串行通讯 SPI与CAN SPI 接口特点 CAN现场总线特点 什么是串行通讯 在正式进入主题前 我么先来介绍一下什么叫做 串行通信 串行通信是计算机的一种数据传输通信方式
  • Base64 编码整理

    前面整理了websocket的知识 其中有一个base64编码的小知识 今天就对这个小知识进行一下整理 1 Base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法 因为只有64种字符 使用6位就可表示过来 所以bas
  • 学习设计模式的一点心得

    我 是一个刚开始学习设计模式的小学生 开始学习设计模式是因为在之前的一家公司 做一个rpg游戏 但是我们又是小公司 没办法 很多都要我这个新手来做 连一些模块的架构都要做 但是能力在那里 工作越做越乱 对于一个没接触过设计模式的人来说 根本
  • Kafka剖析(一):Kafka背景及架构介绍

    转载自 http www infoq com cn articles kafka analysis part 1 Kafka 是由 LinkedIn 开发的一个分布式的消息系统 使用 Scala 编写 它以可水平扩展和高吞吐率而被广泛使用
  • 计网第四章(网络层)(三)(定长掩码和变长掩码)

    IPV4地址的应用规划 定长的子网掩码FLSM 使用同一个子网掩码划分子网 每个子网所分配的IP地址数量相同 造成IP地址的浪费 变长的子网掩码VLSM 使用不同的子网掩码划分子网 每个子网所分配的IP地址数量可以不相同 尽可能地减少对IP
  • 巨人互动

    Facebook是全球最大的社交媒体平台之一 每天有数十亿的用户在其上发布 分享和交流各种内容 为了维护平台的安全性和用户体验 Facebook制定了严格的风控规则来监测和处理违规行为 下面小编讲讲Facebook风控规则 巨人互动 Goo
  • Graphviz 安装教程

    下载安装 windows版本下载地址 http www graphviz org Download windows php 选择需要的版本就行了 安装时勾选下面方框中的选项 将路径添加到系统路径中 这一步不选的话就需要人为添加路径 配置环境
  • CSS实现渐变色边框(Gradient borders)的5种方法

    1 使用border image CSS 提供了 border image 属性用于给 border 绘制复杂图样 与 background image 类似 我们可以在 border 中展示image和linear gradient 通过
  • c++STL常用容器之Queue容器——全面总结(附案例解析)(十五)

    这里有C STL 全面总结详细教程 附案例解析 持续更新中 目录 queue 容器 queue 基本概念 queue 常用接口
  • php 访问 HTTP 网址

    1 只需获取状态码 判断网址是否正常打开 url https www baidu com array get headers url 1 print r array 判断是否正常打开 url https www baidu com arra
  • SpringBoot项目整合JPA+QueryDSL,及apt-maven-plugin报错问题解决

    闲暇之余项搞个JPA的Demo 采用的是SpringBoot JPA QueryDSL 开发工具为Eclipse JPA官网 https spring io projects spring data jpa QueryDSL官网 http
  • Specified class is an interface

    错误 在springboot 启动时候出现该错误 表示有重复的mapper 而且两个mapper 都加了 Mapper注解 或者在mybatis的配置文件中配置了 所以会导致 混乱 解决方法 根据报错提示找到多余的mapper 进行统一化处
  • Jedis之Java操作redis实现模拟验证码发送操作

    import cn hutool core util RandomUtil import redis clients jedis Jedis import java util Scanner author oliverloki Descri
  • keil找不到device,怎么办?

    下载好的keil 准备调试程序 却发现这个问题 找不到我需要的芯片啊啊啊 头大 后面发现是缺少相应的pack 安装keil时 好像没有自动装上STM32系列芯片 所以得需要自己安装 百度一下 找一些资源 然后 把途中红色框住的 分别放在安装
  • 对字符串进行正则取子串

    题目是这样的 对一段HTML网页内容 解析出其中所有的键值对 比如其中type text type为属性 text为值 二者为一个键值对 内容如下
  • Day4-1 反射、可变变量、线程池和Tomcat调优

    反射 Class的三种获取方式 方式一 通过Class forName获取 Class cla1 Class forName lt 类名 gt 方式二 通过类属性 lt 类名 gt class获取 Class cla2 lt 类名 gt c