草庐IT

Performance

全部标签

java - 任意预设精度小数(几乎像 BigDecimal)

我正在寻找一个java类,它将保存一个具有任意预设精度的十进制值。BigDecimal类看起来是一个很好的起点,但我希望能够将小数的大小限制为最终用户决定的大小。从字面上讲,最终用户会指定一个以10为底数的范围,我会分配足够的字节来表示该范围内的任何数字。我正在考虑拥有一个扩展BigDecimal的类。在这门课中,我将添加必要的函数来模拟预设范围内的小数。我向社区提出的问题是:有没有图书馆已经这样做了?扩展BigDecimal是否合理? 最佳答案 我会建议你在你提出的建议之间采取一种中间方式:Apfloat库是一个很好的尝试方式,查

java - 如何减少 HashMap<String, Integer> 类数据结构的内存使用

在开始解释我的问题之前,我应该说明我不是在寻找增加Java堆内存的方法。我应该严格存储这些对象。我正在努力将大量(5-10GB)的DNA序列及其计数(整数)存储在哈希表中。DNA序列(长度不超过32)由“A”、“C”、“G”、“T”和“N”(未定义)字符组成。众所周知,当在内存中存储大量对象时,与C和C++等低级语言相比,Java的空间效率较差。因此,如果我将此序列存储为字符串(对于长度约为30的序列,它占用大约100MB的内存),我会看到错误。我试图将核酸表示为“A”=00、“C”=01、“G”=10、“T”=11并忽略“N”(因为它破坏了char到2位转换为第5种酸)。然后,将这些

java - 为什么 Arrays.copyOf 对于小型数组比 System.arraycopy 快 2 倍?

我最近在玩一些基准测试,发现非常有趣的结果,我现在无法解释。这是基准:@BenchmarkMode(Mode.Throughput)@Fork(1)@State(Scope.Thread)@Warmup(iterations=10,time=1,batchSize=1000)@Measurement(iterations=10,time=1,batchSize=1000)publicclassArrayCopy{@Param({"1","5","10","100","1000"})privateintsize;privateint[]ar;@Setuppublicvoidsetup()

java - 比较 Spark 中的两个数据帧(性能)

我需要比较我的spark应用程序中的两个数据帧。我浏览了以下帖子。HowtoobtainthedifferencebetweentwoDataFrames?但是,我不明白为什么最佳答案中的方法df1.unionAll(df2).except(df1.intersect(df2))比问题中的那个好df1.except(df2).union(df2.except(df1))谁能解释一下?据我了解,后者适用于两个较小的数据集,而前者适用于大型数据集。是因为后者将不同作为联合的一部分吗?即使那样,如果两个数据框有相同记录的可能性更大,那么在后一种情况下我们处理的是一个小数据集。

Java 并发 : lock effiency

我的程序有100个线程。每个线程都这样做:1)如果arrayList为空,则向其添加具有特定属性的元素2)如果arrayList不为空,遍历arrayList中找到的元素,如果找到合适的元素(匹配某些属性),获取并移除arrayList这里的问题是,当一个线程遍历arrayList时,其他99个线程正在等待arrayList上的锁。如果我希望所有100个线程都在无锁条件下工作,您会给我什么建议?所以他们都有工作要做?谢谢 最佳答案 你看过sharedvsexclusive了吗?锁定?您可以在列表上使用共享锁,然后在列表元素上使用“已

performance - JPA+Hibernate(J2SE) @OneToMany - 数百万条记录减慢了添加新对象的速度

我在J2SE项目中使用JPA+Hibernate和PostGreSQL数据库。我有2个实体A和B。A与B具有@OneToMany关系。在我的域模型中,A可能引用数百万个B。当我将新对象添加到集合中时,需要几分钟才能完成。@OneToMany(cascade=CascadeType.PERSIST)Collectionfoo=newArrayList();//mightcontainmillionsofrecords//...//thistakesalotoftimefoo.add(newB());我认为JPA在插入新对象之前获取整个集合。是否可以配置关系,以便通过向集合添加新对象时不执

java - Elasticsearch:使用 Java 添加手动映射

我无法更改映射。谁能帮我找出代码中的错误?我已经找到了根据几个教程更改映射的标准方法。但是当我尝试调用映射结构时,在手动创建映射后出现了一个空白的映射结构。但是在插入一些数据后出现了映射规范,因为ES当然使用默认的。更具体地看下面的代码。publicclassElasticTest{privateStringdbname="ElasticSearch";privateStringindex="indextest";privateStringtype="table";privateClientclient=null;privateNodenode=null;publicElasticTe

java - 大规模文档共现分析

我有大约1000个文件。其中每个包含大约20,000个文档。我还有一个大约1,000,000个单词的列表。我想计算每个词与任何其他词出现的次数。因此,存在大小为1MX1M的稀疏矩阵。为了加快计算速度,我通过执行以下操作分别处理每个文件:1-我机器中的每个内核都在处理一个文件并输出以下格式的文件WordId1WordId2Frequency2-完成每个文件后,我将1000个文件合并为一个文件。这是我目前的方法,但它需要很长时间才能完成,我认为应该有更有效的方法来完成,因此欢迎您提出意见。 最佳答案 我做过这样的一些统计,我把工作分成两

Java多线程应用程序只使用一个核心

我在使用openJDK1.7.0_5164位的CentOS6.0上运行的JVM出现问题。我的系统是4核系统和8GB内存。我正在运行我自己编写的Java多线程应用程序。它应该将大量数据插入NoSQL数据库。为此,我使用java.concurrent.Executors中的“CachedThreadPoolExecutor”产生了4个线程。我实例化了4个实现“Runnable”接口(interface)的Worker。之后我使用线程池执行线程。这是我的代码:publicvoidstartDataPump(intnumberOfWorkers){//class"DataPump"implem

java - 为什么基于 Java 的冒泡排序优于选择排序和插入排序

好的,我已经实现了冒泡排序、选择排序和插入排序。我正在使用Java.Random对象创建三个相同的十万个数字数组。我将这些依次传递给每个排序方法。我使用System.nanotime对结果进行计时。一些背景信息。我在选择和插入排序中遵循的排序算法来自FrankCarano的“Java中的数据结构和抽象第3版”,冒泡排序超出了我的想象。下面我提供了一个独立的类来执行所有这些。Carano的算法哪里出了问题我没看到?下面您将看到我正在计算基本操作的周期并计算完成时间。在运行时,循环次数可以忽略不计。对我来说,在查看完成时间时,Bubble是第一个,Selection是第二个,Inserti