小编bad*_*oit的帖子

用Java清理线程

我有一个Java方法,它对输入集执行两次计算:估计和准确的答案.估计总是可以廉价地在可靠的时间内计算出来.准确的答案有时可以在可接受的时间内计算,有时不会(不知道先验......必须试着看).

我想要设置的是一些框架,如果准确答案花费太长时间(固定超时),则使用预先计算的估计.我想我会使用一个线程.主要的复杂因素是计算准确答案的代码依赖于外部库,因此我无法"注入"中断支持.

针对此问题的独立测试用例就在这里,展示了我的问题:

package test;

import java.util.Random;

public class InterruptableProcess {
    public static final int TIMEOUT = 1000;

    public static void main(String[] args){
        for(int i=0; i<10; i++){
            getAnswer();
        }
    }

    public static double getAnswer(){
        long b4 = System.currentTimeMillis();
        // have an estimate pre-computed
        double estimate = Math.random();

        //try to get accurate answer
        //can take a long time
        //if longer than TIMEOUT, use estimate instead
        AccurateAnswerThread t = new AccurateAnswerThread();
        t.start();

        try{
            t.join(TIMEOUT);
        } catch(InterruptedException ie){
            ;
        }

        if(!t.isFinished()){
            System.err.println("Returning estimate: …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

9
推荐指数
1
解决办法
2016
查看次数

系统/操作系统缓存与应用程序缓存

在开发使用压缩磁盘索引或磁盘文件的应用程序时,其中部分索引或文件被重复访问(为了论证,让我们说一些类似于 Zipfian 分布的东西),我想知道什么时候足够/更好地依赖操作系统级缓存(例如,Debian 系统上的内存映射),什么时候在应用程序层上实现某些东西更好(例如,像FileChannel缓冲或 Memcached 或 Java 代码中的自定义 LRU 缓存之类的东西) )。

例如,一篇文章(参考 Solr)主张为操作系统缓存留出可用内存:

操作系统的缓存非常有用,它显着减少了回答查询所需的时间(即使在完全重新启动服务器之后!),因此请始终记住为操作系统保留一些可用内存。

这让我想知道我的应用程序级缓存用 LRU Java 对象的弱映射填充内存是否弊大于利,尤其是。由于 Java 在内存开销方面如此贪婪......而不是使用该内存来缓存一些最终结果对象,操作系统会更好地使用该空间来缓存大量原始压缩数据吗?另一方面,应用层缓存对于平台独立性更好,无论代码运行在什么操作系统上都允许缓存。

所以我意识到除了运行几个特定的​​基准测试之外,我不知道如何以原则性的方式回答这个问题。这让我问......

对于是为应用程序级缓存分配可用内存,还是让该内存可用于操作系统级缓存,存在哪些一般准则?

特别是,我希望能够更好地识别何时对应用程序级缓存进行编码是浪费时间,甚至对性能有害。

performance caching operating-system memory-management

8
推荐指数
1
解决办法
2558
查看次数

在Java中规范化可能编码的URI字符串

使用Java,我想剥离片段标识符并执行一组不同URI的简单规范化(例如,小写方案,主机).输入和输出URI在一般HTTP意义上应该是等效的.

通常,这应该是直截了当的.但是,对于像http://blah.org/A_%28Secret%29.xml#blah%这样编码的URI ,(Secret)行为java.util.URI会使生活变得困难.

规范化方法应该http://blah.org/A_%28Secret%29.xml从URI 返回,http://blah.org/A_%28Secret%29.xml并且http://blah.org/A_(Secret).xml在解释中不等同[§2.2; RFC3968 ]

所以我们有以下两种规范化方法:

URI u = new URI("http://blah.org/A_%28Secret%29.xml#blah");
System.out.println(u);
        // prints "http://blah.org/A_%28Secret%29.xml#blah"

String path1 = u.getPath();      //gives "A_(Secret).xml"
String path2 = u.getRawPath();   //gives "A_%28Secret%29.xml"


//NORMALISE METHOD 1
URI norm1 = new URI(u.getScheme().toLowerCase(), u.getUserInfo(), 
                      u.getHost().toLowerCase(), u.getPort(), path1, 
                      u.getQuery(), null);
System.out.println(norm1);
// prints "http://blah.org/A_(Secret).xml"

//NORMALISE METHOD 2
URI norm2 = new URI(u.getScheme().toLowerCase(), u.getUserInfo(),
                      u.getHost().toLowerCase(), u.getPort(), path2, 
                      u.getQuery(), null);
System.out.println(norm2);
// prints "http://blah.org/A_%2528Secret%2529.xml"
Run Code Online (Sandbox Code Playgroud)

如我们所见,在没有片段标识符的情况下解析和重建URI.

但是,对于方法1,u.getPath() …

java uri normalization percent-encoding

7
推荐指数
1
解决办法
2944
查看次数

Pig一直试图连接到作业历史服务器(并失败)

我正在运行无法连接到Hadoop作业历史记录服务器的Pig作业.

任务(通常是任何任务GROUP BY)运行一段时间,然后它以如下消息开头:

2015-04-21 19:05:22,825 [main] INFO  org.apache.hadoop.mapred.ClientServiceDelegate - Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server
2015-04-21 19:05:26,721 [main] INFO  org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2015-04-21 19:05:29,721 [main] INFO  org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
Run Code Online (Sandbox Code Playgroud)

然后它会继续一段时间重试连接.有时它会先于工作.Othertimes它抛出了这个例外:

2015-04-21 19:05:55,822 [main] WARN  org.apache.pig.tools.pigstats.mapreduce.MRJobStats - Unable to get job counters
java.io.IOException: java.io.IOException: java.net.NoRouteToHostException: No Route …
Run Code Online (Sandbox Code Playgroud)

hadoop apache-pig

6
推荐指数
1
解决办法
6694
查看次数