Tag: 性能

postInstantiate buildSessionFactory慢/内存庞大的数据库

拥有超过520个表的ERP数据库,EntityPersister的postInstanciate非常慢并且消耗超过512M,这对于仅一个会话Factory而言,应用程序变得非常慢。

防止JPA中的N + 1选择

我有JPA实体订单与Customer的ManyToOne关系。 它是双向的,因此Customer也有一个OneToMany字段订单。 这两个关系都使用EAGER获取(或者在OpenJPA fetchplan中)。 当我从Order中选择时,我得到1个订单选择,N选择Customer.orders字段。 令我惊讶的是,OpenJPA,EclipseLink和Hibernate存在这个问题,即使我使用JOIN FETCH(它确实在单向情况下工作)。 有没有好办法解决这个问题? 有没有解决更复杂图形的N + 1选择问题的解决方案? 编辑:我自己的研究结果: – 对于OpenJPA(我正在使用)我还不知道解决方案 – 对于Hibernate @Fetch(FetchMode.SUBSELECT)解决了这个问题。 使用@BatchSize也有帮助,它同时选择给定数量的customer.orders字段。 – 对于EclipseLink,我发现了一个类似的function@BatchFetch(value = BatchFetchType.IN)但在这种情况下没有帮助,我想它无法在双向关系中有效地处理这个问题。

为什么在java 7中ftp上传速度慢

我想问一下是否有人知道FTP的任何Java 7问题? 我已经使用了Sun Net和Apache Commons Net库,并且都在Java 6上按预期执行。但是当我将我的开发环境(Eclipse)切换到1.7时,相同的操作执行速度非常慢(大约4.5到8KB / s),这些是本地主机服务器和局域网内的另一台服务器。 我尝试过缓冲流,逐字节传输,关闭Nagle算法,并使用Apache便捷方法storeFile(),后者最终执行以加速localhost,但再次减速到远程服务器上的爬行。 我还设置所有机器关闭状态FTP过滤。 InputStream is = null; OutputStream os = null; try { is = new BufferedInputStream(prepareInputStream(data)); os = new BufferedOutputStream(prepareOutputStream(data)); if (is == null || os == null) { log.error(“Can’t build connection”); return; } byte[] buf = new byte[4096]; int c = 1; while (c > […]

.NET与Java之间子串操作性能的比较

获取字符串的子字符串是一种非常常见的字符串操作操作,但我听说Java和.NET平台之间的性能/实现可能存在很大差异。 具体来说,我听说在Java中, java.lang.String为substring提供了常量时间操作,但在.NET中, System.String提供了线性性能Substring 。 这些真的是这样吗? 可以在文档/源代码等中确认吗? 此实现是特定的,还是由语言和/或平台指定的? 每种方法的优缺点是什么? 一个人从一个平台迁移到另一个平台应该寻求什么来避免陷入任何性能陷阱?

使用带有套接字的Javas对象流的性能问题

我正在尝试使用Java中的套接字和对象流来进行本地IPC,但是我看到性能不佳。 我正在测试通过ObjectOutputStream发送对象的ping时间,以通过Socket上的ObjectInputStream接收回复。 这是请求者: public SocketTest(){ int iterations = 100; try { Socket socket = new Socket(“localhost”, 1212); ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); double start = System.currentTimeMillis(); for (int i = 0; i < iterations; ++i) { Request request = new Request(); objectOutputStream.writeObject(request); Response response = (Response)objectInputStream.readObject(); } double finish = […]

Nashorn创业缓慢可以克服吗?

我使用Rhino作为图形内部的脚本组件。 在该项目中,大约有200个小脚本独立运行。 启动应用程序时,脚本应立即全速运行。 Rhino的表现已经足够了,但自从Oracle建议迁移到Nashorn之后,我面临着一个困境。 下图显示了Rhino和Nashorn之间的负载差异,大约有15,000个脚本调用。 Nashorn的创业缓慢是我最大的问题。 注意,这是在JDK 1.8.0上。 JDK 1.8u5是类似的 我希望图片清晰。 这是我如何使用ScriptEngine的概述: 我正在使用One scripting Engine实例, 我为每个脚本创建一个CompiledScript对象, Swingworker执行一次CompiledScript.eval()。 每半秒SwingWorkers就会启动。 每个CompiledScript都有自己的SimpleScriptContext实例,可以在每次执行时重复使用。 下面我包含了一个运行时配置文件,说明了引擎随时间的繁忙程度; 有谁知道如何克服Nashorn的创业缓慢? 更新于2015年4月15日 在Java8u45上使用200个单独的脚本进行相同的测试。 性能要好得多! 在Java7上运行与Rhino类似。

并发使用java.util.Random时的争用

Oracle Java文档说: java.util.Random的实例是线程安全的。 但是,跨线程并发使用相同的java.util.Random实例可能会遇到争用,从而导致性能不佳。 请考虑在multithreading设计中使用ThreadLocalRandom。 可能是表现不佳的原因是什么?

使用arrays数组(2D)或一维数组实现更高效的矩阵?

使用数组实现Matrix构造时哪个更有效? 使用一维数组或数组数组(2D)? 我认为2D更有效,因为您已经拥有元素的X和Y坐标,在1D实现中您必须计算索引。 编辑:它正在使用Java实现

为什么lambda IntStream.anyMatch()比天真的实现慢10?

我最近在分析我的代码并发现了一个有趣的瓶颈。 这是基准: @BenchmarkMode(Mode.Throughput) @Fork(1) @State(Scope.Thread) @Warmup(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS) public class Contains { private int[] ar = new int[] {1,2,3,4,5,6,7}; private int val = 5; @Benchmark public boolean naive() { return contains(ar, val); } @Benchmark public boolean lambdaArrayStreamContains() { return Arrays.stream(ar).anyMatch(i […]

BigInteger大部分时间都是优化乘法

嗨我想以最及时优化的方式乘以2大整数。 我目前正在使用karatsuba算法。 任何人都可以建议更优化的方式或算法来做到这一点。 谢谢 public static BigInteger karatsuba(BigInteger x, BigInteger y) { // cutoff to brute force int N = Math.max(x.bitLength(), y.bitLength()); System.out.println(N); if (N <= 2000) return x.multiply(y); // optimize this parameter // number of bits divided by 2, rounded up N = (N / 2) + (N % 2); // x = a […]