今天早上来收到报障,视频生产流程不同了,都进不了lego,经排查,一个pingback服务访问超时,程序每次访问都起一个线程,由于服务已经挂掉了,占用太多的线程不能释放,服务坚挺了1天后,终于OutOfMemoryError: unable to create new native thread了。
经了解pingback的服务已经被人下线了,机器都找不着了,听说是个没有的东西,所以决定把代码中相关的逻辑都去掉。发现同事负责的模块也需要修改,让他一起修改。总共改了三四个模块,到1点钟终于上线完成了,好了吃饭去。吃完饭往回走的路上,收到别人反馈,给我发了一张图,曲线开始下降 的时间刚好是上线的时间,吓死宝宝了,赶快查,半天没有查出来问题,赶快回滚,回滚完还是没有好。后来发现我查错地方了,根本不需要回滚,汗,查到原因是没有meta所以流程中止,同时接到反馈api服务报500错误,不能设置meta。终于对上了,最终查到500错误的原因是,
把:
public boolean isPPSAppList(int appId) {
boolean result = false;
List<OpConfig> wirtelist = opConfigService.getChildrenNodes("pps_app_id_list");
if(wirtelist != null && wirtelist.size() > 0) {
for(OpConfig config : wirtelist) {
String value = config.getValue();
if(appId == StringUtil.parseInt(value)) {
return true;
}
}
}
return result;
}
改成了:
public boolean isPPSAppList(Integer appId) {
if(appId == null){
return false;
}
boolean result = false;
List<OpConfig> wirtelist = opConfigService.getChildrenNodes("pps_app_id_list");
if(wirtelist != null && wirtelist.size() > 0) {
for(OpConfig config : wirtelist) {
String value = config.getValue();
if(appId == StringUtil.parseInt(value)) {
return true;
}
}
}
修改了方法的参数声明,导致了:
java.lang.NoSuchMethodError: com.qiyi.videocloud.openplatform.service.thridparty.PpsugcService.isPPSAppList(I)Z
com.qiyi.openplatform.api.FileController.uploadMeta(FileController.java:986)
sun.reflect.GeneratedMethodAccessor612.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
把方法的参数由int改成interger竟然会出NoSuchMethod,好想不通,后来看到这篇文章http://blog.csdn.net/zgs_shmily/article/details/46604059 和http://blog.csdn.net/yuan_hai_long/article/details/51490850 略懂。原来编译器是会严格按照参数的类型和返回值来查找方法的,lib库修改了参数,没有编译调用方,调用方还按照之前的方法参数和返回值去找,就是找不到的。我去问了同事,他说他是整体编译的。我让他在测试环境重现一下这个问题,果真也出了问题,然后他再调用的类里面加了行日志,再次运行,就好了,因为加了日志就编译器就会重现编译。调用方和lib库同时做了修改就没有问题了,之前是用mvn package打包的,编译器发现java类没有变化所以没有重新编译,少了一个clean费了这么大的周折,也算是涨知识了。
相关推荐
总的来说,`int`适合于需要高性能计算和节省内存的情况,而`Integer`则在需要对象特性的场景下更有优势,例如集合操作、参数传递或序列化。在实际开发中,选择合适的数据类型取决于具体需求和上下文。了解并熟练掌握...
`Integer`类提供了许多额外的方法,如`toString()`、`compareTo()`以及与`int`相互转换的方法,如`intValue()`、`parseInt()`等。 在自动装箱和拆箱方面,Java 5引入了这一特性,使得在`int`和`Integer`之间进行...
Integer 是 int 的扩展类,提供了许多有用的方法来处理数字。例如: ```java Integer i = new Integer(10); int n = i.intValue(); // 获取 int 值 String s = i.toString(); // 转换为字符串 ``` 其他内建类型 ...
Java 中 int 和 Integer 的区别 Java 中的数据类型可以分为基本数据类型和复杂数据类型,int 是基本类型,而 Integer 是一个类。下面是它们之间的主要区别: 1. 数据类型 int 是基本数据类型,直接存储数值,而 ...
在使用MyBatis进行数据操作时,我们经常会遇到关于返回值类型的困扰,特别是涉及到基本类型int和对象类型Integer之间的转换。标题"mybatis返回Integer"指的是在MyBatis的映射文件或者Mapper接口中,使用Integer作为...
例如,当我们将`int`赋值给`Integer`变量时,编译器会自动调用`Integer.valueOf()`方法进行装箱;反之,从`Integer`转换为`int`时,编译器会自动调用`intValue()`方法进行拆箱。这种转换在编译阶段就已经完成,使得...
在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。理解这两种方法的区别和应用场景对于编写高效且正确的Java代码至关重要。 首先,我们来...
int与integer的区别从大的方面来说是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是...
在Java编程语言中,`Integer`和`int`是两种不同的数据类型,它们在使用上有一些关键的区别。首先,`int`是Java的八种原始数据类型之一,它用来存储整数值,如-2147483648到2147483647之间的数字。`int`变量的默认值...
- 方法支持:`Integer`作为类,提供了许多额外的方法,如`toString()`、`compareTo()`等,而`int`不具备这些功能。 - 性能:由于`int`是基本类型,没有对象创建的开销,所以在计算密集型任务中使用`int`通常比`...
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
- **获取值的方法**:如`intValue()`, `longValue()`, `floatValue()`, `doubleValue()`用于获取`Integer`对象的不同数值类型表示。 - **其他方法**:如`hashCode()`, `equals(Object obj)`用于判断对象的相等性。 ...
在使用Mybatis进行数据操作时,有时可能会遇到返回`int`或`Integer`类型时出现异常的情况。这种问题通常出现在当Mapper方法试图返回一个可能是`null`的结果,但方法声明的返回类型是基本类型`int`时。由于基本类型不...
Java 中 int 和 Integer 的区别 Java 作为一门面向对象的编程语言,具有两种基本数据类型:基本数据类型(primitive type)和引用类型(reference type)。在 Java 中,基本数据类型只有八个:boolean、char、byte...
Java 中 int 和 Integer 的区别 Java 中的 int 和 Integer 是两个不同的概念,都是表示整数类型,但是它们有着不同的特性和用途。本文将详细介绍 Java 中 int 和 Integer 的区别。 1. 数据类型 int 是 Java 中的...
在Java编程语言中,`int` 和 `Integer` 是两种截然不同的数据类型,它们各自具有独特的特性和用途。理解这两者之间的差异对于编写高效、可靠的代码至关重要。 首先,`int` 是Java中的一个基本数据类型,它代表整数...
3. **性能**:操作 `int` 类型的计算通常比 `Integer` 快,因为对象操作涉及到方法调用和内存管理。 4. **集合操作**:Java的集合框架如 `ArrayList` 和 `HashMap` 只能存储对象,所以如果需要将整数放入这些集合,...
Integer对象包含一个int值,并提供了一些额外的方法,如`parseInt()`、`toString()`等。 2. 使用场景: - int通常用于简单的数值计算,因为它更高效,无需创建对象。 - Integer在需要对象的场合使用,例如作为...
将 Integer 转换成 int 可以使用 intValue() 方法: int num = integer.intValue(); 七、将 String 转换成 BigDecimal 将 String 转换成 BigDecimal 可以使用以下方法: BigDecimal d_id = new BigDecimal(str);...