Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。


5
Java使用的内存远大于堆大小(或正确大小的Docker内存限制)
对于我的应用程序,Java进程使用的内存远远大于堆大小。 容器运行所在的系统开始出现内存问题,因为容器占用的内存比堆大小大得多。 堆大小设置为128 MB(-Xmx128m -Xms128m),而容器最多占用1GB的内存。正常情况下需要500MB。如果docker容器的限制低于(例如mem_limit=mem_limit=400MB),则该进程将被操作系统的内存不足杀手杀死。 您能解释一下为什么Java进程使用的内存比堆多得多吗?如何正确调整Docker内存限制的大小?有没有办法减少Java进程的堆外内存占用量? 我使用来自JVM中本机内存跟踪的命令收集了有关此问题的一些详细信息。 从主机系统,我获得了容器使用的内存。 $ docker stats --no-stream 9afcb62a26c8 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 9afcb62a26c8 xx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.0acbb46bb6fe3ae1b1c99aff3a6073bb7b7ecf85 0.93% 461MiB / 9.744GiB 4.62% 286MB / 7.92MB 157MB / 2.66GB 57 从容器内部,获取进程使用的内存。 $ ps -p 71 -o pcpu,rss,size,vsize …
118 java  linux  docker  memory  jvm 

16
System.gc()什么时候做某事?
我知道Java中的垃圾回收是自动化的。但是我知道,如果您调用System.gc()代码,那么JVM可能会或可能不会决定此时执行垃圾回收。这究竟如何工作?JVM看到时会根据什么基础/参数确切地决定执行(或不执行)GC System.gc()? 在这种情况下,有任何示例是个好主意吗?

3
是否将JUnit类分成特殊的测试包?
我通过阅读学习测试驱动开发的概念工匠的文章(点击工匠下按主题)在回答中建议我刚才的问题,“学习JUnit和适当的软件工程样品工程”。到目前为止,我喜欢它! 但是现在我想坐下来自己尝试一下。我有一个问题,希望只需要一个简单的答案。 您如何组织JUnit测试类和实际代码?我主要是在谈论包的结构,但是注释的任何其他概念也将有所帮助。 您是否将测试类放在org.myname.project.test。*中,将普通代码放在org.myname.project。*中?您是否将测试课程放在普通课程的旁边?您是否愿意在类名前面加上Test而不是给它们加上后缀? 我知道这似乎是我不应该担心的事情,但是我是一个非常以组织为中心的人。我几乎是那种花费更多时间找出方法来跟踪要完成的事情,而不是实际完成工作的人。 我有一个项目,目前已将其整齐地分为多个软件包,但该项目变得一团糟。我不想尝试重构所有内容并编写测试,而是想重新开始,首先进行所有测试。但是首先我需要知道我的测试要去哪里。 编辑:我完全忘记了Maven,但似乎大多数人都在使用它!过去我有一个特定的用例,其中Maven完全崩溃了,但Ant给了我所需的灵活性,所以我最终还是依附于Ant,但是我想也许我只是在采用错误的方法。我想我会再尝试一下Maven,因为听起来好像可以很好地进行测试驱动的开发。
118 java  unit-testing  junit 

30
识别列表中的重复项
我有一个整数类型的列表,例如: [1, 1, 2, 3, 3, 3] 我想要一种返回所有重复项的方法,例如: [1, 3] 做这个的最好方式是什么?
118 java  collections 



19
空检查链与捕获NullPointerException
Web服务返回巨大的XML,我需要访问它的深层嵌套字段。例如: return wsObject.getFoo().getBar().getBaz().getInt() 问题是getFoo(),getBar(),getBaz()可能所有的回报null。 但是,如果我null在所有情况下都进行检查,则代码将变得非常冗长且难以阅读。此外,我可能会错过某些领域的检查。 if (wsObject.getFoo() == null) return -1; if (wsObject.getFoo().getBar() == null) return -1; // maybe also do something with wsObject.getFoo().getBar() if (wsObject.getFoo().getBar().getBaz() == null) return -1; return wsObject.getFoo().getBar().getBaz().getInt(); 可以写吗 try { return wsObject.getFoo().getBar().getBaz().getInt(); } catch (NullPointerException ignored) { return -1; } 或将其视为反模式?


6
“ java -cp”和“ java -jar”之间的区别?
使用java -cp CLASSPATH和运行Java应用程序有什么区别java -jar JAR_FILE_PATH?在运行Java应用程序时,其中一个优先于另一个吗?我的意思是这些方法中的哪一种对JVM而言更昂贵(根据其机器资源的使用情况)? 哪一种会导致JVM在尝试运行应用程序时产生更多线程?
118 java  jar  jvm  classpath 

9
从Spring MVC中的控制器操作重定向到外部URL
我注意到以下代码将用户重定向到项目内的URL, @RequestMapping(method = RequestMethod.POST) public String processForm(HttpServletRequest request, LoginForm loginForm, BindingResult result, ModelMap model) { String redirectUrl = "yahoo.com"; return "redirect:" + redirectUrl; } 但是,以下内容已按预期正确重定向,但需要http://或https:// @RequestMapping(method = RequestMethod.POST) public String processForm(HttpServletRequest request, LoginForm loginForm, BindingResult result, ModelMap model) { String redirectUrl = "http://www.yahoo.com"; return "redirect:" + redirectUrl; } 我希望重定向始终重定向到指定的URL,无论它是否具有有效协议,并且都不想重定向到视图。我怎样才能做到这一点? 谢谢,
118 java  spring  jsp  spring-mvc 

9
如何使用Spring管理REST API版本管理?
我一直在搜索如何使用Spring 3.2.x管理REST API版本,但没有找到易于维护的任何东西。我将首先解释我所遇到的问题,然后是一个解决方案...但是我确实想知道我是否在这里重新发明轮子。 我想基于Accept标头来管理版本,例如,如果请求具有Accept标头application/vnd.company.app-1.1+json,我希望spring MVC将其转发到处理该版本的方法。而且由于并非同一版本中的API中的所有方法都发生了变化,所以我不想转到每个控制器并为在版本之间未发生变化的处理程序进行任何更改。我也不想逻辑确定在控制器本身中使用哪个版本(使用服务定位器),因为Spring已经发现了要调用的方法。 因此,采用1.0版至1.8版的API,其中在1.0版中引入了处理程序,并在v1.7版中对其进行了修改,我想通过以下方式进行处理。假设代码在控制器内部,并且有一些代码能够从标头中提取版本。(以下在Spring中无效) @RequestMapping(...) @VersionRange(1.0,1.6) @ResponseBody public Object method1() { // so something return object; } @RequestMapping(...) //same Request mapping annotation @VersionRange(1.7) @ResponseBody public Object method2() { // so something return object; } 在Spring中这是不可能的,因为这两种方法具有相同的RequestMapping注释,并且Spring无法加载。这个想法是VersionRange注释可以定义一个打开或关闭的版本范围。第一种方法从1.0到1.6版本有效,而第二种方法从1.7版开始(包括最新版本1.8)有效。我知道,如果有人决定通过99.99版,这种方法就会失败,但是我可以接受。 现在,由于没有认真修改spring的工作原理就不可能实现上述目的,因此我想到了修改处理程序与请求匹配的方式,特别是编写自己的ProducesRequestCondition,并在其中拥有版本范围。例如 码: @RequestMapping(..., produces = "application/vnd.company.app-[1.0-1.6]+json) @ResponseBody public Object method1() { // so …

18
如何在Spring Boot中设置基本URL以进行休息?
我正在尝试混合mvc和在单个spring boot项目中休息。 我想在一个地方设置所有其余控制器(例如example.com/api)的基本路径(我不想用@RequestMapping('api/products'),而只是用注释每个控制器@RequestMapping('/products')。 Mvc控制器应可通过example.com/whatever访问 可能吗? (我不使用spring数据休息,只是spring mvc)

2
@RunWith(MockitoJUnitRunner.class)vs MockitoAnnotations.initMocks(this)
在编写新的jUnit4测试时,我想知道是使用@RunWith(MockitoJUnitRunner.class) 还是MockitoAnnotations.initMocks(this)。 我创建了一个新测试,并且向导使用Runner自动生成了一个测试。MockitoJUnitRunner的Javadocs声明以下内容: 与JUnit 4.4和更高版本兼容,此运行器添加了以下行为: 初始化带有Mock注释的模拟,因此不需要显式使用MockitoAnnotations.initMocks(Object)。在每种测试方法之前都要初始化模拟。在每种测试方法之后验证框架使用情况。 我尚不清楚使用Runner是否比我过去使用过的initMocks()方法有任何优势。 任何想法或链接将不胜感激!
118 java  junit4  mockito 

7
如何在龙目岛中调用超级构造函数
我有一堂课 @Value @NonFinal public class A { int x; int y; } 我还有另一个B班 @Value public class B extends A { int z; } lombok抛出错误,说它找不到A()构造函数,显式调用它是我想要lombok要做的就是给b类添加注释,从而生成以下代码: public class B extends A { int z; public B( int x, int y, int z) { super( x , y ); this.z = z; } …
118 java  lombok 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.