Tag: 性能

如何在hibernate中启用批量插入?

使用hibernate,当我尝试启用批量插入时 50 我得到以下输出: […] cfg.SettingsFactory INFO – JDBC batch updates for versioned data: disabled […] cfg.SettingsFactory INFO – Order SQL inserts for batching: disabled 然后这个: […] jdbc.AbstractBatcher DEBUG – Executing batch size: 1 从不超过batch size: 1基本上是batch size: 1 。 我错过了一个设置吗?

中大结果集上的Hibernate,JDBC和Java性能

问题 我们正在尝试优化我们的dataserver应用程序。 它通过mysql数据库存储股票和报价。 我们对提取性能不满意。 上下文 – database – table stock : around 500 lines – table quote : 3 000 000 to 10 000 000 lines – one-to-many association : one stock owns n quotes – fetching around 1000 quotes per request – there is an index on (stockId,date) in the quote table – no […]

有什么方法可以进一步优化Javareflection方法调用?

我想知道是否有任何额外的优化我可以实现以提高Java中reflection调用的速度。 并不是说性能是令人望而却步的,但是我在考虑库中的某些代码时会得到一些我正在编写的代码在某个地方实现紧密循环。 考虑一种reflection性调用的实用方法: public static Object invoke(Object targetObject, String methodName, Object[] arguments, Class[] signature) 基本操作是 return method.invoke(targetObject, arguments); 作为性能优化,我使用目标对象的类,方法名称和签名(其代码可能会使用某些改进)的哈希来缓存方法,但除此之外,还有什么我可以做的吗? 我听说过InvokeDynamic的一些早期实现的参考听起来很有希望,但我只是假设它们可能还不适用,并且我打算使用自己的字节代码操作,因为我希望保持实用程序简单(但速度快)。 干杯。

Java Double vs double:类类型与原始类型

我很好奇Java的类和double的原始类型之间的性能差异。 所以我创建了一个小基准测试,发现类类型比基本类型慢3到7倍。 (在本地机器OSX上为3倍,在ideone上为7倍) 这是测试: class Main { public static void main(String args[]) { long bigDTime, littleDTime; { long start = System.nanoTime(); Double d = 0.0; for (Double i = 0.0; i < 1432143.341; i += 0.1) { d += i; } long end = System.nanoTime(); bigDTime = end – start; System.out.println(bigDTime); } { long start […]

检查字符串的最快方法是Java中的字母数字

检查String是否仅包含字母数字字符的最快方法是什么。 我有一些代码会嚼掉很多CPU,我想知道是否会比使用预编译的正则表达式更快。 更新:这么多的投票,关心解释? Stackoverflow不应该用于讨论用于实现任务的算法可能会更快?

Javamultithreading文件下载性能

最近我在一个需要比以前更多的IO交互的项目上工作,我觉得我想要查看常规库(特别是Commons IO)并解决更深入的IO问题。 作为一项学术测试,我决定实现一个基本的,multithreading的HTTP下载器。 这个想法很简单:提供一个下载URL,代码将下载该文件。 为了提高下载速度,将文件分块并同时下载每个块(使用HTTP Range: bytes=xx标头)以尽可能多地使用带宽。 我有一个工作原型,但你可能已经猜到了,它并不完全理想。 目前我手动启动3个“下载程序”线程,每个线程下载文件的1/3。 这些线程使用通用的同步“文件编写器”实例来实际将文件写入磁盘。 完成所有线程后,“文件编写器”完成,任何打开的流都关闭。 一些代码片段可以给你一个想法: 线程启动: ExecutorService downloadExecutor = Executors.newFixedThreadPool(3); … downloadExecutor.execute(new Downloader(fileWriter, download, start1, end1)); downloadExecutor.execute(new Downloader(fileWriter, download, start2, end2)); downloadExecutor.execute(new Downloader(fileWriter, download, start3, end3)); 每个“下载程序”线程下载一个块(缓冲)并使用“文件编写器”写入磁盘: int bytesRead = 0; byte[] buffer = new byte[1024*1024]; InputStream inStream = entity.getContent(); long seekOffset = chunkStart; while ((bytesRead = inStream.read(buffer)) […]

调整JVM(GC)以实现高响应的服务器应用程序

我在Linux 64bit上运行一个具有8个核心CPU和6 GB内存的应用程序服务器。 服务器必须具有高响应性。 经过一番检查后,我发现在服务器上运行的应用程序创建了相当多的短期对象,并且只有大约200~400 MB的长寿命对象(只要没有内存泄漏) 阅读http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html后,我使用这些JVM选项 -server -Xms2g -Xmx2g -XX:MaxPermSize=256m -XX:NewRatio=1 -XX:+UseConcMarkSweepGC 结果:次要GC需要0.01~0.02秒,主要GC需要1~3秒,小GC不断发生。 如何进一步改进或调整JVM? 堆大小? 但GC需要更多时间吗? 更大的NewSize和MaxNewSize(适合年轻一代)? 其他collections家? 并行GC? 让主要GC更频繁地进行是一个好主意吗? 如何?

字符串连接中的“+”是否会影响效率?

我在java中使用过String,StringBuilder和StringBuffer。 我想到了这个问题,而我从效率的角度思考。 字符串连接中的“+”是否会影响效率?

为什么我收到响应代码:非HTTP响应代码:java.net.SocketException?

我正在尝试使用JMeter将请求发送到我在localhost上运行的应用程序,但由于java.net.SocketException,许多请求都失败了。 我在控制台中没有看到任何exception。 我读了这些问题1和问题2,但没有多大帮助。 我的代码如下: try { return myService.findItems(group); } catch (NullPointerException n) { n.printStackTrace(); } catch (HibernateException h) { h.printStackTrace(); } catch (IOException i) { i.printStackTrace(); } return null; 知识库 public LinkedHashMap findItems(String group) throws NullPointerException, HibernateException, IOException { Session session = sessionFactory.getCurrentSession(); ….. //request is sent to database return items; } 我的JMeter配置的屏幕截图

在性能,隐式(自动)拆箱或显式拆箱方面哪个更好?

把它放在代码中 – 性能更好(如果有差异的话)? 鉴于这种: public class Customer { …. public Boolean isVIP(){…} … } 哪个更快? public void handleCustomer(Customer customer) { if (customer.isVIP()) // Auto Unboxing { handleNow(customer); } else { sayHandlingNowButQueueForTomorrow(customer); } } 或这个: public void handleCustomer(Customer customer) { if (customer.isVIP().booleanValue()) // Explicit unboxing { handleNow(customer); } else { sayHandlingNowButQueueForTomorrow(customer); } }