小编Kro*_*ros的帖子

Java堆空间 - -Xmx如何正常工作?

我在我的应用程序中遇到了臭名昭着的OutOfMemoryException,而不是简单地增加可用堆空间的数量,我试图查看问题所在,以防万一,我的应用程序出现了某种泄漏.

我添加了JVM参数-XX:+ HeapDumpOnOutOfMemoryError,当遇到OutOfMemory错误时会创建堆转储.然后我分析了使用不同的分析工具生成的转储文件.然后我开始使用-Xmx参数并观察模式.

令我困惑的是以下内容.为什么在分析转储时我发现所有对象的总大小远小于我使用-Xmx参数设置的总大小?例如,假设我将-Xmx设置为'2048m'.当我分析转储文件时,我在堆上发现了总共400Mb的对象.我期待找到2GB.我错过了什么吗?

java heap out-of-memory

8
推荐指数
2
解决办法
1831
查看次数

HSQL org.hsqldb.HsqlException:模式名称无效

我正在使用HSQL在我的java应用程序上运行许多单元测试.我正在使用Spring + Hibernate.从MySQL切换到HSQL时遇到问题.测试在MySQL上完美运行,但每当我改为HSQL时,我都会遇到以下异常:

Caused by: org.hsqldb.HsqlException: invalid schema name: LMS
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.SchemaManager.getSchemaHsqlName(Unknown Source)
at org.hsqldb.SchemaManager.getSchemaName(Unknown Source)
at org.hsqldb.Session.getSchemaName(Unknown Source)
at org.hsqldb.SchemaManager.getTable(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readSimpleRangeVariable(Unknown Source)
at org.hsqldb.ParserDML.compileInsertStatement(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我的Spring配置如下:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver" />
    <property name="url" value="jdbc:hsqldb:file:lms" />
    <property name="username" value="SA"/>
    <property name="password" value=""/>
</bean>


<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />

    <property name="packagesToScan"> …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate hsqldb

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

Hibernate拦截器不起作用

我有一个简单的HibernateInterceptor,基本上我想自动设置几个字段.这个拦截器(如下所示)扩展了EmptyInterceptor:

public class EntityAuditInterceptor extends EmptyInterceptor {

    /**
     * The Serial Version UUID.
     */
    private static final long serialVersionUID = 4636626262147801287L;

    /* (non-Javadoc)
     * @see org.hibernate.EmptyInterceptor#onFlushDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
     */
    public boolean onFlushDirty(Object entity,  Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {

        // doing stuff here

        return false;
    }

    /* (non-Javadoc)
     * @see org.hibernate.EmptyInterceptor#onSave(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
     */
    public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {

                // doing stuff …
Run Code Online (Sandbox Code Playgroud)

spring hibernate interceptor

5
推荐指数
2
解决办法
7384
查看次数

Joda-时代以来的天数

我有一个问题,即自Joda-Time库返回的纪元以来的天数根据我输入的日期而变化.如果我进入, 我会期望相同的结果,因为他们都是在同一天.以下是我的代码.2012-05-14 22:00:002012-05-14 02:00:00

        try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = sdf.parse("2013-05-03 07:00:00");
        Date date2 = sdf.parse("2013-05-03 23:30:00");


        MutableDateTime epoch = new MutableDateTime();
        epoch.setDate(0); //Set to Epoch time
        System.out.println("Epoch: " + epoch);
        Days days1 = Days.daysBetween(epoch, new MutableDateTime(date1.getTime()));
        Days days2 = Days.daysBetween(epoch, new MutableDateTime(date2.getTime()));
        System.out.println("1) Days Since Epoch: " + days1.getDays());
        System.out.println("2) Days Since Epoch: " + days2.getDays());
    } catch (ParseException e) {
        e.printStackTrace(); 
    }
Run Code Online (Sandbox Code Playgroud)
Epoch: 1970-01-01T11:09:00.414+01:00
1) Days Since …
Run Code Online (Sandbox Code Playgroud)

java jodatime

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

Java WS Authenticator在多线程环境中

目前我正在努力解决Sun课堂上的一个错误java.net.Authenticator.似乎Authenticator该类具有系统范围的静态Authenticator.这导致我的多线程应用程序中出现以下问题.

  1. 线程1 - 对用户1进行身份验证
  2. 线程2 - 为用户2进行身份验证
  3. 线程1 - 执行代码以下载用户1的消息

此时,系统将获取用户2的消息,而不是用户1的消息.

我试过寻找解决方案.许多人建议尝试以下代码:

AuthCacheValue.setAuthCache(new AuthCacheImpl());
Authenticator.setDefault(exchangeAuthenticator);
Run Code Online (Sandbox Code Playgroud)

但是,这对我来说不起作用,因为我的应用程序是多线程的(exchangeAuthenticator将始终设置为在最新线程中初始化的身份验证器).

如果有人有任何想法,即使是黑客目前也会做,我真的很感激,因为目前唯一的"整洁"解决方案是synchronized在主要的执行方法上放置一个对性能产生巨大影响的方法.

java authentication multithreading sun

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