小编yak*_*uka的帖子

Java中复杂对象的可用内存

我尽力解释我的问题.也许它有点抽象.

我读了一些关于不在Java代码中明确调用GC,终结方法,指向null等的文献.

我有一些大型XML文件(客户发票).使用Jaxb,文件在复杂的Java对象中进行编组.它的属性是基本类型(Integer,BigDecimal,String等),但也包括其他复杂类的类,其他类的列表,列表作为属性的类列表等.

当我用对象做我的东西时,我需要将它从内存中删除.有些XML非常大,我可以避免内存泄漏或OutOfMemoryError情况.

所以,我的问题是:

  • 将大对象分配给null是否足够?我读过,如果有软引用,GC将不会释放该对象.
  • 我应该深入清除对象,清除所有列表,为属性分配null等等吗?
  • 那么JaxB(我使用Java6,内置JaxB)和软引用呢?JaxB比旧的JibX marshaller更快,但我不知道它在内存使用方面是否更糟.
  • 我应该用WeakReference或类似的东西包装megacomplex JaxB类吗?

请原谅我混合Java内存使用概念,JaxB等.我正在研究大型运行进程的稳定性,而.hprof文件证明所有发票的所有客户数据都保留在内存中.如果这是一个简单,基本或罕见的问题,请原谅.

提前致谢

java memory-leaks memory-management jaxb

10
推荐指数
1
解决办法
3533
查看次数

jqPlot - x轴角度的多线刻度

我有一个关于x轴刻度的问题.我使用jqPlot 0.9.7

我的刻度是多线的,如下所示:a <br> b <br> c <br> d.我使用renderer: $.jqplot.CategoryAxisRenderer它并且效果很好,因此刻度线在多行显示并且
有效.

现在我需要将它们旋转30º.我试过'角度:-30'但它不起作用.

使用此配置:

xaxis: {
        renderer: $.jqplot.CategoryAxisRenderer,
        tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
        ticks: ['a <br> b <br> c <br> d' , 'p <br> q <br> r <br> s'],
        tickOptions:{
                angle: -30,
                fontSize: '9px'
        }

}
Run Code Online (Sandbox Code Playgroud)

刻度线显示在一条旋转的长线上.既没有<br>也没有\n 被解释为我需要.这是我发现的最佳方法.

这有什么解决方案吗?我怎么能写旋转的文本标记?

任何建议都对我很有帮助.提前致谢.最好的祝福

text rotation jqplot

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

避免使用Java中的重复字符串

我想问一个关于在Java中避免String重复的问题.

情境是:以标签的XML和属性像这样的:

<product id="PROD" name="My Product"...></product>
Run Code Online (Sandbox Code Playgroud)

使用JibX,这个XML在这样的类中被编组/解组:

public class Product{
private String id;
private String name;
// constructor, getters, setters, methods  and so on
}
Run Code Online (Sandbox Code Playgroud)

该程序是一个长时间的批处理,因此产品对象被创建,使用,复制等.

好吧,问题是:当我用Eclipse内存分析器(MAT)这样的软件分析执行时,我发现了几个重复的字符串.例如,在id属性中,PROD值在2000个实例等周围重复.

我该如何避免这种情况?Product类中的其他属性可能会在执行时更改其值,但是像id,name ......这样的attrs 不会经常更改.

我已经了解了一些关于String.intern()方法的内容,但我还没有使用过,我不确定它是否是一个解决方案.我可以在这些属性中定义最常用的值,比如类中的静态最终常量吗?

我希望我能以正确的方式表达我的问题.非常感谢任何帮助或建议.提前致谢.

java string duplicates

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

HikariCP:从BoneCP迁移并分析基准数据

我正在测试从BoneCP到HikariCP的迁移.

基准(HikariCP Benchmark)的结果如下:

Benchmark                                 (maxPoolSize)  (pool)   Mode  Samples      Score  Score error   Units
c.z.h.b.ConnectionBench.cycleCnnection               32  hikari  thrpt       16   1033,071       38,893  ops/ms
c.z.h.b.ConnectionBench.cycleCnnection               32    bone  thrpt       16   1648,954       42,610  ops/ms
c.z.h.b.ConnectionBench.cycleCnnection               32  tomcat  thrpt       16    592,838       21,709  ops/ms
c.z.h.b.ConnectionBench.cycleCnnection               32    c3p0  thrpt       16    125,857        3,666  ops/ms
c.z.h.b.ConnectionBench.cycleCnnection               32   vibur  thrpt       16    831,693        9,299  ops/ms
c.z.h.b.StatementBench.cycleStatement                32  hikari  thrpt       16  49983,959     4796,385  ops/ms
c.z.h.b.StatementBench.cycleStatement                32    bone  thrpt        8   7022,146      526,111  ops/ms
c.z.h.b.StatementBench.cycleStatement                32  tomcat  thrpt       16  28777,731     1011,316  ops/ms
c.z.h.b.StatementBench.cycleStatement                32 …

vmware benchmarking connection-pooling jdbc hikaricp

4
推荐指数
1
解决办法
3082
查看次数

Spring Batch:转换为多线程时的问题(混合数据)

也许这是一个反复出现的问题,但我需要根据我的上下文进行一些自定义.

我正在使用Spring Batch 3.0.1.RELEASE

我有一些简单的工作,有一些步骤.一步是像这样的块:

    <tasklet transaction-manager="myTransactionManager">
<batch:chunk reader="myReader" processor="myProcessor" writer="myWriter" commit-interval="${commit.interval}">
</batch:chunk>
Run Code Online (Sandbox Code Playgroud)

<bean id="myProcessor" class="org.springframework.batch.item.support.CompositeItemProcessor" scope="step">
<property name="delegates">
    <list>
        <bean class="...MyFirstProcessor">
        </bean>
        <bean class="...MySecondProcessor">
        </bean>
    </list>
</property>
Run Code Online (Sandbox Code Playgroud)

  • Reader:JdbcCursorItemReader
  • 处理器:CompositeProcessor与我的代表
  • 作家:CompositeWriter与我的代表

通过这种配置,我的工作完美无缺.

现在,我想将其转换为多线程作业.在基本多线程作业文档之后,我在tasklet中包含了一个SympleAsyncTaskExecutor,但它失败了.

我已经readed JdbcCursorItemReader与多线程执行无法正常工作(是不是?).我已经将读者更改为JdbcPagingItemReader,这已成为一场噩梦:作业不会失败,编写过程没问题,但数据在线程之间混合,客户数据不正确且连贯(客户服务,添加,来自其他人).

那么,为什么会这样呢?我怎样才能更改为多线程作业?

  • 复合处理器和编写器是否适用于多线程?
  • 我怎样才能制作一个自定义线程安全的复合处理器?
  • 也许它可能是JDBC读者:对于多线程,是否有任何线程安全的JDBC读取器?

我非常关心和困惑,所以任何帮助都会非常感激.非常感谢.

[编辑 - 已解决]

好吧,我的问题的正确和合适的解决方案是从开始设计多线程和线程安全执行的作业.习惯性地首先使用单线程步执行来理解和了解Spring Batch概念; 但如果你认为你要离开这个阶段,那么必须提出诸如不可变对象,线程安全列表,地图等的考虑因素.

目前我的问题的当前状态是我后面描述的下一个.在测试了马丁的建议并考虑到迈克尔的指导方针之后,我终于解决了我的问题.接下来的步骤不是很好的做法,但我无法从开始重建我的工作:

  • 将itemReader更改为JdbcPagingItemReader,并将setState更改为false.
  • 通过CopyOnWriteArrayList更改列表.
  • 通过ConcurrentHashMap更改HashMap.
  • 在每个委托处理器中,通过传递上下文(实现ApplicationContextAware)并获取bean的唯一实例(将每个注入的bean配置为scope ="prototype"),获取每个bean属性的新实例(幸运的是,只有一个注入的bean) ).

所以,如果委托的bean是:

<bean class="...MyProcessor">
<property name="otherBean"  ref="otherBeanID" />
Run Code Online (Sandbox Code Playgroud)

改成:

<bean class="...MyProcessor">
<property name="otherBean"  value="otherBeanID" />
Run Code Online (Sandbox Code Playgroud)

并且,在MyProcessor中,从上下文获取otherBeanID …

parallel-processing spring multithreading thread-safety spring-batch

3
推荐指数
1
解决办法
8448
查看次数

复制Java Hashtable

我有一个关于Java中的重复Hashtables的问题(可能是重复的Java集合).

我的Hashtable有这样的对:

  • 键:字符串
  • 值:类型的对象 C

C 看起来像这样:

public interface A extends Cloneable, Serializable{...}

public abstract class B implements A{...}

public class C extends B{...}
Run Code Online (Sandbox Code Playgroud)

我希望使用相同的内容将此哈希表复制到另一个具有相同内容的变量中new Hashtable(Map t).我的问题是:值对象进行此操作的条件是什么?我可以使用Hashtable复制构造函数吗?

我可以使用SerializationUtils.clone值,但执行时间太长.

提前致谢.

java hashtable duplicates

0
推荐指数
1
解决办法
8692
查看次数