我有一个对象如下:
public class Records implements java.io.Serializable{
private int cId;
private int pId;
private int vlaue;
private int tag;
public Records(int c, int p, int v, int t){
this.cId=c;
this.pId=p;
this.value=v;
this.tag=t;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经收集了大量数据,构建了上述类中的对象并将它们分解为磁盘.
我忘记包含在类文件中的一个转储是访问每个对象的值的方法.例如,访问特定对象的cId值.
我修改了类定义以添加这样的方法,但后来我无法将对象反序列化回记录类并获得此运行时错误:
java.io.InvalidClassException: Records; local class incompatible: stream classdesc serialVersionUID = -1232612718276774474, local class serialVersionUID = -8244963718951538904
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at DeSerialise.main(DeSerialise.java:21)
Run Code Online (Sandbox Code Playgroud)
我想我需要告诉java他们是相同的定义并修改serialVersionUID但不太确定如何?任何想法都会受到欢迎!
我有8个文件.它们中的每一个大约是1.7 GB.我正在将这些文件读入字节数组,并且该操作足够快.
然后读取每个文件如下:
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data)));
Run Code Online (Sandbox Code Playgroud)
当使用单个核心按顺序处理时,需要花费60秒才能完成.但是,当在8个单独的核心上分配计算时,每个文件花费的时间远远超过60秒.
由于数据都在内存中并且没有执行IO操作,因此我认为每个核处理一个文件所需的时间不应超过60秒.因此,总共8个文件应该在60秒内完成,但事实并非如此.
我错过了一些关于BufferedReader行为的内容吗?或上述代码中使用的任何读者.
值得一提的是,我正在使用此代码首先上传文件:
byte[] content=org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath));
Run Code Online (Sandbox Code Playgroud)
所有代码看起来像这样:
For each file
read the file into a byte[]
add the byte[] to a list
end For
For each item in the list
create a thread and pass a byte[] to it
end For
Run Code Online (Sandbox Code Playgroud) 我想计算文档中特定短语的出现次数.例如"stackoverflow论坛".假设D表示使用包含两个术语的文档设置的文档.
现在,假设我有以下数据结构:
A[numTerms][numMatchedDocuments][numOccurInADocument]
Run Code Online (Sandbox Code Playgroud)
其中numMatchedDocuments是D的大小,numOccurInADocument是特定术语在特定文档中出现的次数,例如:
A[stackoverflow][document1][occurance1]=3;
Run Code Online (Sandbox Code Playgroud)
意味着,术语"stackoverflow"出现在文档"document1"中,并且它的第一次出现在位置"3".
然后我选择发生最少的术语并遍历其所有位置,以查找"论坛"是否出现在当前术语"stackoverflow"位置+ 1的位置.换句话说,如果我在第4位找到"论坛",那么这是一个短语,我找到了匹配.
每个文档的匹配很简单,并且运行速度相当快,但是当文档数量超过2,000,000时,它变得非常慢.我已经将它分发到核心上,当然它变得更快但是想知道是否有更好的算法.
谢谢,
Psudo码:
boolean docPhrase=true;
int numOfTerms=2;
// 0 for "stackoverflow" and 1 for "forums"
for (int d=0;d<D.size();d++){
//D is a set containing the matched documents
int minId=getTheLeastOccuringTerm();
for (int i=0; i<A[minId][d].length;i++){ // For every position for LeastOccuringTerm
for( int t=0;t<numOfTerms;t++){ // For every terms
int id=BinarySearch(A[t][d], A[minId][d][i] - minId + t);
if (id<0) docPhrase=false;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有大约1000个文件.每个文件包含约20,000个文档.我还有一个大约1,000,000个单词的列表.
我想计算每个单词与其他单词出现的时间.因此,有一个大小为1M X 1M的稀疏矩阵.
为了加快计算速度,我通过执行以下操作分别处理每个文件:
1-我机器中的每个核心都在处理单个文件并输出以下格式的文件
WordId1 WordId2 Frequency
Run Code Online (Sandbox Code Playgroud)
2-完成每个文件后,我将1000文件合并为一个文件.
这是我目前的方法,但这需要很长时间才能完成,我认为应该有更有效的方法来做到这一点,所以欢迎你的意见.
我有一个在大型数据集上运行的复杂Java应用程序.该应用程序执行速度相当快,但随着时间的推移,它似乎占用了大量内存并减速.有没有办法在不重新启动应用程序的情况下运行JVM垃圾收集器?
我正在运行一个实验性的java应用程序,每次我杀死或停止应用程序时,都会创建僵尸进程.我知道僵尸并不是真正的问题,因为他们(据说)不会消耗资源.但是,我的RAM可用空间明显少于应有的空间.这是转储
ps aux | grep java
3052 8.5 0.0 0 0 ? Zl Sep24 127:24 [java] <defunct>
6644 0.9 0.0 0 0 ? Zl Sep24 13:20 [java] <defunct>
8325 0.7 0.0 0 0 ? Zl Sep24 11:01 [java] <defunct>
8954 0.7 0.0 0 0 ? Zl Sep24 11:01 [java] <defunct>
16229 1.3 0.0 0 0 ? Zl Sep24 16:57 [java] <defunct>
19222 106 0.0 0 0 ? Zl Sep24 1346:37 [java] <defunct>
Run Code Online (Sandbox Code Playgroud)
以下都不起作用:(
kill -9 PID , kill -1 PID, …Run Code Online (Sandbox Code Playgroud) 我正在使用Aho-Corasick文本匹配,并想知道它是否可以更改为匹配术语而不是字符.换句话说,我希望条款成为匹配而不是字符的基础.举个例子:
搜索查询:"他",
句子:"你好世界",
Aho-Corasick将"he"与句号"hello world"匹配,但是我希望没有匹配.所以,我的意思是"术语"而不是字符.
java algorithm full-text-search string-matching aho-corasick
我是Octave的新手,想知道如何解决非线性方程.这是一个示例等式
x^4-16x^3+61x^2-22x-12=0
Run Code Online (Sandbox Code Playgroud)
更新:
w+x+y+1=3
2w+3x+4y+5=10
w-x+y-1=4
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试连接到Bing搜索API并且无法使代码工作.我搜索了问题,找不到工作代码.
这是我的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.codec.binary.Base64;
public class BSearch{
public static void main(String[] args) {
// TODO Auto-generated method stub
//--------------------------------------Bing search------------------------------
String searchText = "barack";
searchText = searchText.replaceAll(" ", "%20");
String accountKey="MYACCOUNTKEY";
byte[] accountKeyBytes = Base64.encodeBase64((accountKey + ":" + accountKey).getBytes());
String accountKeyEnc = new String(accountKeyBytes);
URL url;
try {
url = new URL(
"https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Web?Query=%27" + searchText + "%27&$top=50&$format=json");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Basic " + accountKeyEnc); …Run Code Online (Sandbox Code Playgroud) 如何将对象及其所有数据结构使用的内存回收到我的应用程序内存中,如果没有System.gc()它只建议而不必执行内存检查.这还包括像finalize.
换句话说,假设我有一个HashMap,我希望它存储的所有数据都从内存中删除.我通常用clean方法清理这种类型的集合或将其附加到null但是似乎没有将内存空间返回给应用程序?
编辑:
让我们说以下内容:
TIntObjectHashMap<byte[]> map=new TIntObjectHashMap<byte[]>();
//fill the map with 20GB
map.clear();
//Or map=null;
Run Code Online (Sandbox Code Playgroud)
20GB不应该免费吗?就是那个问题.
java ×8
algorithm ×2
aho-corasick ×1
bing-api ×1
kill-process ×1
linux ×1
math ×1
matlab ×1
memory-leaks ×1
multicore ×1
octave ×1
performance ×1
search ×1
ssl ×1