[Seasar-user:15022] [S2JDBC] SQL自動生成のメモリ消費
Takashi ARAKANE
[E-MAIL ADDRESS DELETED]
2008年 7月 14日 (月) 14:48:35 JST
荒金と申します。
JdbcManager での SQL自動生成を行った場合と、updateBySqlを使用した場合とで、
メモリの消費の仕方が明らかに異なるように思います。
s2jdbc-tutorial を MySQL を使うように変更し、次の2つのコードを実行してみました。
EmployeeLogic がSQL自動生成版で、Employee2Logicが updateBySql版です。
---------- ここから
public class EmployeeLogic {
public JdbcManager jdbcManager;
@RequiresNewTx
public void exec(final int count) {
for(int i = 0; i < count; i++) {
String name = new StringBuilder()
.append("example_")
.append(i)
.toString();
insert(name);
}
}
public void insert(final String name) {
Employee emp = new Employee();
emp.name = name;
emp.jobType = JobType.ANALYST;
emp.salary = 100;
emp.version = 1;
jdbcManager.insert(emp).execute();
}
public static void main(String...args) {
try {
SingletonS2ContainerFactory.setConfigPath("app.dicon");
SingletonS2ContainerFactory.init();
SingletonS2Container.getComponent(EmployeeLogic.class).exec(100000);
} finally {
SingletonS2ContainerFactory.destroy();
}
}
}
---------- ここまで
---------- ここから
public class Employee2Logic {
public JdbcManager jdbcManager;
@RequiresNewTx
public void exec(final int count) {
for(int i = 0; i < count; i++) {
String name = new StringBuilder()
.append("example_")
.append(i)
.toString();
insert(name);
}
}
public void insert(final String name) {
jdbcManager
.updateBySql(
"INSERT INTO employee (name, job_type, salary, version) " +
"VALUES (?, ?, ?, 1)",
String.class, String.class, Integer.class)
.params(name, JobType.ANALYST, 100)
.execute();
}
public static void main(String...args) {
try {
SingletonS2ContainerFactory.setConfigPath("app.dicon");
SingletonS2ContainerFactory.init();
SingletonS2Container.getComponent(Employee2Logic.class).exec(100000);
} finally {
SingletonS2ContainerFactory.destroy();
}
}
}
---------- ここまで
10万回 insert を行うという、単純なものなのです。
特に -Xmx 等を指定せずに実行した場合には、EmployeeLogic の方は
徐々にメモリを消費していき、80MBytesを超えた後 OutOfMemoryが発生しますが、
Employee2Logic の方は、25MBytes程度の消費で安定しています。
使い方で、私が大きく勘違いしているのでしょうか?
S2 は 2.4.26、MySQL Connector/J は 5.1.6を使用して検証いたしました。
--
Takashi ARAKANE <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内