假设我使用该方法在Java中创建一个临时文件
File tmp = File.createTempFile(prefix, suffix);
Run Code Online (Sandbox Code Playgroud)
如果我没有明确调用该delete()方法,该文件何时被删除?
作为一种直觉,它可能是JVM终止时,或更早(由垃圾收集器)或更晚(通过某些操作系统清扫过程).
我正在使用OkHttp 3,我一直在泄漏连接警告:
WARNING: A connection to https://help.helpling.com/ was leaked. Did you forget to close a response body?
Jul 14, 2016 6:57:09 PM okhttp3.ConnectionPool pruneAndGetAllocationCount
Run Code Online (Sandbox Code Playgroud)
每次我得到一个ResponseBody,我要么调用.string()哪个可以为我关闭流,或者我在一个finally块中明确地关闭它,方法如下:
ResponseBody responseBody = response.body();
try (Reader responseReader = responseBody.charStream()) {
...
}
finally {
responseBody.close();
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序大量使用网络,但这种警告经常出现.我从来没有看到造成这种推测泄漏的任何问题,但我还是想知道,如果和什么我做错了.
谁能对此有所了解?
我有这个简单的Logback配置文件,包含两个appender和一些基于包名称的自定义日志记录级别.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%date{HH:mm}\t%-5level\t%msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>my_logger.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%date{dd MMM HH:mm}|%class{0}|%-5level|%msg%n</pattern>
</encoder>
</appender>
<!-- custom logging levels -->
<logger name="myapp.package1" level="INFO" />
<logger name="myapp.package2" level="INFO" />
<root>
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
使用此配置,自定义日志记录级别将应用于两个appender.
如何更改它以便仅ConsoleAppender使用这些自定义日志记录级别,同时FileAppender坚持默认级别?
我想知道你是否认为删除引用(设置它们null)到对象以帮助Java垃圾收集器是一个好习惯.
例如,假设您有一个包含两个字段的类,其中一个字段非常耗费内存.如果您知道只需要进行特定处理,则可以在之后立即将其置零以帮助GC.
假设我真的需要这两个字段,而不仅仅是内部变量,所以heavyObject1不能超出方法末尾的范围.
你会这样做作为一般做法吗?
public class TestClass {
public static Object heavyObject1;
public static Object object2;
private static void action() {
object2 = doSomething(heavyObject1);
heavyObject1 = null; //is this good?
}
}
Run Code Online (Sandbox Code Playgroud) 到目前为止,从Eclipse导出Runnable JAR文件是从另一台计算机上的命令行启动Eclipse项目的最快方法。看到这个答案。
一个问题是,如果要从其运行的计算机上安装的JRE早于Eclipse使用的JDK,则会出现此错误:
java.lang.UnsupportedClassVersionError: test_hello_world : Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)
我知道在Eclipse上我可以以较低的遵从性级别(例如1.6而不是1.7)来构建项目,但这似乎并不影响导出的JAR文件。
关于如何导出要在较旧的JRE上执行的Runnable JAR文件的任何想法吗?
我有几个可执行类,我想自动将日志文件名设置为正在执行的Java类的名称.
我知道我可以通过编程方式执行此操作,可能使用Reflection MDC,但是通过配置实现这一点并不是更简单的方法logback.xml吗?
这对我来说似乎是一个相当基本的需求,所以我很惊讶我找不到有关它的文档.
我需要以编程方式使用 ELKI 来运行 k-medoids 聚类算法。我有一个相似度矩阵,我希望输入到算法中。
是否有任何代码片段可用于如何运行 ELKI 算法?我基本上需要知道如何创建Database和Relation对象,创建自定义距离函数,并读取算法输出。
不幸的是,ELKI 教程 ( http://elki.dbs.ifi.lmu.de/wiki/Tutorial ) 侧重于 GUI 版本和实现新算法,并且试图通过查看 Javadoc 来编写代码令人沮丧。
如果有人知道任何易于使用的 k-medoids 库,这也可能是这个问题的一个很好的答案。
我无法理解为什么Java编译器不会通过用一些唯一的ID替换它们来缩短变量,参数和方法名称的名称.
例如,给定课程
public class VeryVeryVeryVeryVeryLongClass {
private int veryVeryVeryVeryVeryLongInt = 3;
public void veryVeryVeryVeryVeryLongMethod(int veryVeryVeryVeryVeryLongParamName) {
this.veryVeryVeryVeryVeryLongInt = veryVeryVeryVeryVeryLongParamName;
}
}
Run Code Online (Sandbox Code Playgroud)
编译后的文件包含所有这些非常长的名称:

简单的唯一ID不会加快解析速度,还会提供第一个混淆吗?
我喜欢Stanford CoreNLP,现在它对我的NLP需求非常准确.问题在于分析大量文本(假设数百万句话)需要数天时间.
是否存在牺牲一些准确性以提高效率的替代Java实现(理想情况下)提供相同的API?
java ×7
logback ×2
compilation ×1
eclipse ×1
elki ×1
k-means ×1
memory-leaks ×1
nlp ×1
obfuscation ×1
okhttp3 ×1
stanford-nlp ×1