我有一个服务器java组件,它在启动时具有巨大的内存需求,逐渐消失.因此,作为启动时的一个例子,内存要求可能会达到4g; 在最初的激增结束后,将降至2g.我已经将组件配置为以5g的内存开始,组件启动良好; 使用过的内存激增至4g,然后接近2g.此时堆消耗的内存仍然在4g左右徘徊,我希望将其降低(基本上将可用内存保持在几百mb而不是2g.我尝试使用MinFreeHeapRatio和MaxFreeHeapRatio将它们从默认值降低但这导致在初始峰值期间初始运行后没有触发垃圾收集,并且使用的内存保持在高于平常水平.任何指针都会有很大帮助.
我有一个输入字符串
这个或"那个或"或"这个或那个"
那应该被翻译成
这个|| "那或"|| "这个或那个"
因此,尝试在字符串中查找字符串(或)的出现,并将其替换为另一个字符串(||).我试过以下代码
Pattern.compile("( or )(?:('.*?'|\".*?\"|\\S+)\\1.)*?").matcher("this or \"that or\" or 'this or that'").replaceAll(" || ")
Run Code Online (Sandbox Code Playgroud)
输出是
这个|| "那或"|| '这|| 那'
问题是单引号中的字符串也被替换了.至于代码,样式只是一个例子.我会编译模式并在我开始工作时重用它.
public class ThreadSafe implements ITaskCompletionListener {
private final Set<String> taskIds = new HashSet<String>();
private final Set<String> successfulIds = new HashSet<String>();
private final Set<String> cancelledIds = new HashSet<String>();
private final Set<String> errorIds = new HashSet<String>();
public ThreadSafe() {
}
// invoked concurrently
@Override
public void onCancel(String pTaskId) {
remove(pTaskId);
cancelledIds.add(pTaskId);
}
// invoked concurrently
@Override
public void onError(String pTaskId) {
remove(pTaskId);
errorIds.add(pTaskId);
}
// invoked concurrently
@Override
public void onSuccess(String pTaskId) {
remove(pTaskId);
successfulIds.add(pTaskId);
}
private void remove(String pTaskId) {
taskIds.remove(pTaskId); …Run Code Online (Sandbox Code Playgroud) 我已经看到了线程池执行器实现和它提供的被拒绝的执行策略.但是,我有一个自定义要求 - 我希望有一个回调机制,在达到队列大小限制时我会收到通知,并说当队列大小减少到最大允许队列大小的80%时.
public interface ISaturatedPoolObserver {
void onSaturated(); // called when the blocking queue reaches the size limit
void onUnsaturated(); // called when blocking queues size goes below the threshold.
}
Run Code Online (Sandbox Code Playgroud)
我觉得这可以通过子类化线程池执行器来实现,但是是否已经实现了版本?我很乐意在需要时提供更多细节和我的工作以提供清晰度.