gpt4 book ai didi

java - 执行 时堆内存不足

转载 作者:行者123 更新时间:2023-12-01 05:14:03 26 4
gpt4 key购买 nike

上下文.xml

<jdbc:initialize-database data-source="dataSource" ignore-failures="ALL">
<jdbc:script location="classpath:scrubd.sql"/>
</jdbc:initialize-database>

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

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
depends-on="dataSource"
name="_sessFac">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="hibernate.cfg.xml.incDTD"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.shutdown">true</prop>
</props>
</property>
</bean>

当我在单元测试中运行 ant 目标时,在 spring 第一次初始化后,我收到内存不足错误。然而,当我通过简单地命名我的数据库 import.sql 来填充我的表时并让 hibernate 处理它,我没有得到这个内存不足错误。

为什么会发生这种情况?

此外,Spring 将数据加载到数据库中的时间比 Hibernate 长大约一秒。任何能解释原因的人都会获得奖励积分。

StackTrace(来自 Ant )

Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:234)
at java.lang.StringBuffer.toString(StringBuffer.java:561)
at org.apache.tools.ant.util.StringUtils.replace(StringUtils.java:92)
at org.apache.tools.ant.util.DOMElementWriter.encodedata(DOMElementWriter.java:501)
at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:236)
at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:221)

导致它的 bean 必须是我的 session 工厂,因为我不会调用 <jdbc:initialize-database/>一颗“ bean ”。

我想说的是,根据堆栈跟踪,它正在将我的整个 sql 脚本读入一个字符串,因为它相当大; ~38K 行。

最佳答案

最后只是说管它,然后让 hibernate 填充我的表格。事实上,我现在在进行单元测试时正在读取 20mB 文件,并且我仍然没有遇到 hibernate 内存不足错误,这让我认为如果您想在对表进行单元测试之前填充表,请不要'不要让 Spring 来做这件事。生活和学习。

关于java - 执行 <jdbc :initalize-database> 时堆内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11569637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com