相关疑难解决方法(0)

当Java Compiler在一行中看到许多String连接时会发生什么?

假设我在Java中有一个表达式,例如:

String s = "abc" + methodReturningAString() + "ghi" + 
                anotherMethodReturningAString() + "omn" + "blablabla";
Run Code Online (Sandbox Code Playgroud)

Java的默认JDK编译器的行为是什么?它只是制作五个连接还是有智能性能技巧?

java string performance concatenation

30
推荐指数
1
解决办法
4250
查看次数

StringBuilder的RAM消耗是什么样的?

我们有一些操作,我们正在进行大量的大型字符串连接,并且最近遇到了内存不足异常.不幸的是,调试代码不是一种选择,因为这是在客户站点发生的.

因此,在研究代码的大修之前,我想问一下:对于大型字符串,StringBuilder的RAM消耗特性是什么?

特别是它们与标准字符串类型相比.字符串的大小超过10 MB,我们似乎遇到了大约20 MB的问题.

注意:这不是速度而是RAM.

.net ram stringbuilder

6
推荐指数
2
解决办法
2616
查看次数

使用hibernate读取大量数据时的OutOfMemory

我需要从数据库中导出大量数据.这是代表我的数据的类:

public class Product{
...

    @OneToMany
    @JoinColumn(name = "product_id")
    @Cascade({SAVE_UPDATE, DELETE_ORPHAN})
    List<ProductHtmlSource> htmlSources = new ArrayList<ProductHtmlSource>();
Run Code Online (Sandbox Code Playgroud)

...}

ProductHtmlSource - 包含我实际需要导出的大字符串.

由于导出数据的大小比JVM内存大,我正在按块读取数据.像这样:

final int batchSize = 1000;      
for (int i = 0; i < 50; i++) {
  ScrollableResults iterator = getProductIterator(batchSize * i, batchSize * (i + 1));
  while (iterator.getScrollableResults().next()) {
     Product product = (Product) iterator.getScrollableResults().get(0); 
     List<String> htmls = product.getHtmlSources();
     <some processing>
  }
Run Code Online (Sandbox Code Playgroud)

}

代码getProductIterator:

public ScrollableResults getProductIterator(int offset, int limit) {
        Session session = getSession(true);
        session.setCacheMode(CacheMode.IGNORE);
        ScrollableResults iterator …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate out-of-memory batch-processing

5
推荐指数
1
解决办法
1万
查看次数