我正在尝试以一种方式管理我的日志记录,在这种方式中,我的最旧的归档日志文件一旦达到总累积大小限制或达到其最大历史记录限制就会被删除.当使用SizeAndTimeBasedRollingPolicy中的logback 1.1.7,滚动文件附加目的地将继续,尽管超出的创造新的档案totalSizeCap集.
这是我的logback.xml文件供参考:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${USERPROFILE}/testlogs/test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>
${USERPROFILE}/testlogs/%d{yyyy-MM-dd_HH}/test%i.log.zip
</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50KB</maxFileSize>
<totalSizeCap>200KB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p - %m%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="file" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是logback中的错误还是我没有正确配置滚动文件appender?
假设我正在定义一个缓存bean,它将在启动应用程序时初始化,并将以固定的间隔刷新,如下所示:
@Component
public class Cache {
...
@PostConstruct
public void initializeCache() {
...
}
@Scheduled(fixedRate = 60L * 1000L)
public void refreshCache() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
即使我没有设置初始延迟,也可以确保@PostConstruct下的initializeCache()方法在第一个调度的refreshCache()调用之前立即执行吗?
我正在研究Java中类似扫雷的游戏,并注意到每当我重置电路板时都会发生内存泄漏.我在下面做了一个测试,发现每当我在ArrayList的add()方法中创建一个新对象时,每当我使用clear()方法时,垃圾收集器都不会从内存中转储元素.以下是一些参考代码:
import java.util.ArrayList;
import java.util.Scanner;
public class MemLeakTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<PointlessObject> list = new ArrayList();
String selection = "1";
while(selection.equals("1")){
System.out.print("Type 1 to run test:");
selection = input.next();
System.out.println();
//begin test
if(selection.equals("1")){
for(int i = 0; i<100000; i++){
list.add(new PointlessObject());
}
}
list.clear(); // ArrayList elements remained in memory
}
}
}
class PointlessObject{
String text;
public PointlessObject(){
text = "Stuff";
}
}
Run Code Online (Sandbox Code Playgroud)
什么是创建一个可以最小化内存泄漏的长对象列表的更好的替代方案?