小弟在项目中遇到了内存瓶颈,服务器内存总是溢出,我在后面会列出dump文件的内容,我在猜想hibernate将表对象化成@Entity的对象,如果这个对象的成员变量很多,换言之表的字段很多(200左右),如果调用类似save,query的方法是不是很占用内存?还有几个疑问也请大家帮着解释一下,我只是在猜想:
1 java中对象的成员变量越多,在new的时候是否会占更多的内存?
2 hibernate中在SQLQuery.list()方法和类似findByExample的方法后是否需要调用flush和clear,有些地方说需要调用,否则会有内存的问题,我不确定。
dump:
1.
LeakSize TotalSize Size Analysis Name Address
971389703 971396517 24 Responsible for 971,396,517 bytes (57.8 %) of Java heap org/apache/commons/collections/SequencedHashMap$Entry 0x82b2c5e8
1,258,104,359 (74.86%) [40] 1 java/util/HashMap 0x7f53ffc8
1,258,104,319 (74.86%) [64] 2 array of [Ljava/util/HashMap$Entry; 0x83c2bc88
1,258,104,184 (74.86%) [24] 2 java/util/HashMap$Entry 0x83c2bd40
1,258,104,160 (74.86%) [30] 2 org/springframework/orm/hibernate3/SessionHolder 0x83c2be48
1,258,104,100 (74.86%) [28] 2 java/util/Collections$SynchronizedMap 0x83c2bed8
1,258,104,072 (74.86%) [40] 1 java/util/HashMap 0x83c2bf48
1,258,104,032 (74.86%) [8] 1 array of [Ljava/util/HashMap$Entry; 0x83c2bf70
1,258,104,024 (74.86%) [24] 2 java/util/HashMap$Entry 0x83c2bf88
1,258,104,000 (74.86%) [80] 11 org/hibernate/impl/SessionImpl 0x82b0ee38
1,258,102,913 (74.86%) [78] 13 org/hibernate/engine/StatefulPersistenceContext 0x82b0f308
980,349,426 (58.33%) [17] 2 org/hibernate/util/IdentityMap 0x82b2c110
980,349,405 (58.33%) [24] 2 org/apache/commons/collections/SequencedHashMap 0x82b2c588
971,396,517 (57.8%) [24] 2 org/apache/commons/collections/SequencedHashMap$Entry 0x82b2c5e8
971,396,406 (57.8%) [24] 4 org/apache/commons/collections/SequencedHashMap$Entry 0x7f619578
87 (0%) [24] 4 org/apache/commons/collections/SequencedHashMap$Entry 0xffffffffe5e9b240
2.
LeakSize TotalSize Size Analysis Name Address
277752297 277752297 2097152 277,752,297 bytes (16.53 %) of Java heap is used by 220,347 instances of java/util/HashMap$Entry array of [Ljava/util/HashMap$Entry; 0xb5cbe268
1,258,104,387 (74.86%) [28] 3 java/lang/ThreadLocal$ThreadLocalMap$Entry 0x7ba45208
1,258,104,359 (74.86%) [40] 1 java/util/HashMap 0x7f53ffc8
1,258,104,319 (74.86%) [64] 2 array of [Ljava/util/HashMap$Entry; 0x83c2bc88
1,258,104,184 (74.86%) [24] 2 java/util/HashMap$Entry 0x83c2bd40
1,258,104,160 (74.86%) [30] 2 org/springframework/orm/hibernate3/SessionHolder 0x83c2be48
1,258,104,100 (74.86%) [28] 2 java/util/Collections$SynchronizedMap 0x83c2bed8
1,258,104,072 (74.86%) [40] 1 java/util/HashMap 0x83c2bf48
1,258,104,032 (74.86%) [8] 1 array of [Ljava/util/HashMap$Entry; 0x83c2bf70
1,258,104,024 (74.86%) [24] 2 java/util/HashMap$Entry 0x83c2bf88
1,258,104,000 (74.86%) [80] 11 org/hibernate/impl/SessionImpl 0x82b0ee38
1,258,102,913 (74.86%) [78] 13 org/hibernate/engine/StatefulPersistenceContext 0x82b0f308
980,349,426 (58.33%) [17] 2 org/hibernate/util/IdentityMap 0x82b2c110
277,752,337 (16.53%) [40] 1 java/util/HashMap 0x82b2c0c0
277,752,297 (16.53%) [2,097,152] 220,347 array of [Ljava/util/HashMap$Entry; 0xb5cbe268
分享到:
相关推荐
在描述中提到的“hibernate自动生成”是指Hibernate提供的代码生成工具,能够帮助我们快速创建Entity(实体)、映射文件(Mapping Files)以及DAO(数据访问对象)等关键组件。这一特性使得开发过程更加便捷,减少了...
同时,类上会有`@Entity`注解表明这是一个Hibernate管理的对象,字段上会有`@Id`、`@Column`等注解来指定它们与数据库表字段的对应关系。 5. **整合到项目中** 将生成的`User`类添加到你的项目中,配置...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得数据库操作变得更为简单。本篇主要围绕"hibernate的表关联操作"展开,通过映射关系来实现对实体类的增...
总结,Hibernate的多对多关系映射是数据库设计中非常重要的一个部分,它简化了Java对象与数据库表之间的交互。通过理解并实践案例,我们可以更深入地掌握这一特性,提高开发效率。在实际项目中,根据业务需求,合理...
3. 实体类和映射文件:在Hibernate中,每个Java实体类都对应着数据库中的一个表,通过XML映射文件(hbm.xml)或注解方式来定义字段与表字段的对应关系。实体类通常需要继承Hibernate的Serializable接口,并使用@...
13. **集合映射**:Hibernate提供了Set、List、Map等多种集合类型与数据库表字段的映射,便于处理复杂的数据结构。 这个中文API文档将涵盖以上所有知识点,对于理解和使用Hibernate框架进行数据库操作具有极大的...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了ORM(对象关系映射)功能,使得开发者能够更方便地操作数据库。本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一...
@Column注解用于定义实体类属性与数据库表字段的对应关系,包括字段名、长度、是否允许为空、默认值等属性。 2.6 @OneToMany、@ManyToOne、@OneToOne、@ManyToMany 这些注解分别表示一对多、多对一、一对一和多对多...
实体类的属性与数据库表字段对应,使用`@Id`定义主键,`@GeneratedValue`自动生成主键,`@Column`指定列名。例如: ```java @Entity @Table(name = "User") public class User { @Id @GeneratedValue(strategy = ...
在实体类中,我们将使用注解来描述对象属性与数据库表字段的对应关系。例如,@Entity表示一个数据库表,@Table指定表名,@Id标识主键,@OneToOne、@OneToMany等注解用于定义关联关系。 在一对一关系中,我们可以...
实体类是与数据库表对应的Java类,通常包含属性(对应表字段)和getter/setter方法。通过@Entity和@Table注解,我们可以标记一个类为数据库实体,并指定其对应的表名。 四、持久化操作 1. Session接口:是...
映射文件描述了实体类的属性与数据库表字段之间的对应关系。 4. **Session和SessionFactory**: `SessionFactory`是Hibernate的核心组件,它是线程安全的,用于创建`Session`实例。`Session`对象是与数据库交互的...
- 实体类(Entity)对应数据库中的表,通过注解(@Entity, @Table, @Column等)声明其属性与表字段的映射。 4. **实体关联**: - 如果涉及到两个表的操作,例如用户(User)和角色(Role),可以通过@ManyToOne, ...
3. **实体类(Entity)**:这些是与数据库表对应的Java类,通过注解或XML映射文件定义其字段与表字段的对应关系。 4. **持久化类(Persistent Class)**:在Hibernate中,带有@Entity注解的Java类表示持久化类,...
5. **实体类(Entity)**:在Hibernate中,实体类代表数据库中的表,通过注解或XML配置文件定义其属性与表字段的映射关系。常用的注解有@Entity、@Table、@Id、@GeneratedValue等。 6. **持久化(Persistence)状态...
2. Entity:表示数据库表的Java类,通过@Entity注解标识,其属性与表字段一一对应。 3. Query:用于执行HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)的接口,提供了丰富的查询方式。 ...
- 实体类:通常对应数据库中的一个表,通过@Entity注解标记,属性对应表字段,@Id标记主键。 - 映射文件:使用XML描述实体类与数据库表的映射关系,如.hbm.xml文件,或者使用注解直接在实体类上定义。 5. ...
Hibernate中的实体对应数据库中的表,实体类通常带有@Entity注解,属性与表字段对应。CRUD操作(创建、读取、更新、删除)可以通过Session对象的save()、get()、update()和delete()等方法实现。同时,Hibernate支持...
通过在类上使用@Entity注解,并定义属性与表字段相对应,实现对象到表的映射。 4. **主键(Primary Key)**:每个实体类都有一个标识其唯一性的主键。在Hibernate中,可以使用@Id注解来标记主键字段。 5. **持久化...
2. 属性映射:通过`@Id`指定主键,`@GeneratedValue`管理自增策略,其他属性对应表字段,如`@Column`。 3. 关系映射:处理一对一、一对多、多对多关系,如`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`。...