小编M S*_*ach的帖子

Hibernate命名查询及其性能优势?

正如hibernate文档所说,命名查询的目的是将HQL从项目中的不同位置清除到某个xml中的单个位置(在声明方法的情况下).这意味着在查询修改的情况下不需要重新编译,但会话工厂的重新加载是必需的,这意味着在大多数情况下,当缓存查询对象时,服务器启动.但是在注释的情况下,我需要在实体级别定义命名查询.所以这里再次编译需要.我的问题是在性能方面也提到了查询帮助.以下是我的理解: -

1)当我使用命名查询时,只将查询对象缓存在二级缓存中.当我说只是查询对象时,这意味着只是查询语法被缓存而不是查询结果.对吗?如果它的权利可能仅在HQL becoz的情况下才有用,我们可以避免将HQL转换为本机查询,每次查询都被触发并具有一些良好的时间性能.

但是如果我们使用本机sql,则命名查询不能提供这种优势,因为在这种情况下不会发生转换.

所以命名查询的主要优点是制作sqls的中央存储库.是的,在HQL的情况下,它可以节省我们对本机sql的一些翻译时间,但请记住,查询对象将在jvm的生命周期中使用,并将消耗一些内存.所以有些人在这里交易.

java hibernate

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

WeakHashMap的用法?

WeakHashMap是Map接口的一个实现,如果相应的键不再被任何程序部分引用,Grabage Collector可以回收值对象的内存.因此,如果密钥不再用于程序中.它的Entry对象将被垃圾收集,无论其用途如何.它清晰到这里

这与HashMap不同,即使不再引用key,值对象仍保留在HashMap中.我们需要在HashMap对象上显式调用remove()方法来删除值.调用remove将只删除map中的条目.它对GC的准备将取决于它是否仍然在程序中的某个地方使用.

请找到上面解释的编码示例

根据我的理解,在HashMap上使用WeakHashMap

我的理解是,只有当我们想要确保Grabage Collector在任何部分程序不再引用密钥时回收值对象时,我们才应该使用WeakHashMap.这使程序内存有效我的理解是正确的吗?

根据JavaDocs使用WeakHashMap ,我可以发现这个声明

此类主要用于密钥对象,其等于方法使用==运算符测试对象标识.

我没有得到上述声明的含义以及它与我对WeakHashMap用法的理解形成对比.实际上我没有得到这个陈述与WeakHashMap的使用有何关系?

更新: - 进一步仔细阅读下面的声明javadocs

当其密钥不再正常使用时,WeakHashMap中的条目将自动被删除.更准确地说,给定密钥的映射的存在不会阻止密钥被垃圾收集器丢弃,即,可以最终化,最终化,然后回收.当一个键被丢弃时,它的条目将被有效地从地图中删除,因此该类的行为与其他Map实现略有不同.

为了我和他人的利益,我正在修改我的理解

根据我的修订理解,在HashMap上使用WeakHashMap

我们应该只在我们想要确保在GC运行时从地图中删除键值对时才能使用WeakHashMap,而键不再是普通用途而不是map本身.

例如: -

    WeakHashMap<Integer, String> numbers = new WeakHashMap<Integer, String>();
    numbers.put(new Integer(1), "one");// key only used within map not anywhere else
    numbers.put(new Integer(2), "two");
    System.out.println(numbers.get(new Integer(1))); // prints "one"
    System.gc();
    // let's say a garbage collection happens here
    System.out.println(numbers.get(new Integer(1))); // prints "null"
    System.out.println(numbers.get(new Integer(2))); // prints "null"


    Object key = new Object();
    m1.put(key, c1);
    System.out.println(m1.size());
    key = null or new …
Run Code Online (Sandbox Code Playgroud)

java hashmap weakhashmap

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

Soap如何支持异步调用而Rest不支持?

我在网上通过Soap vs Rest,发现大多数人都说Soap支持异步调用,而Rest没有,但没有得到任何具体的例子.有人可以帮我吗?

这是我所指的资源之一

http://web.archive.org/web/20120421084456/http://www.prescod.net/rest/rest_vs_soap_overview/ http://searchsoa.techtarget.com/tip/REST-vs-SOAP-How-to-选择最好的网络服务 http://seanmehan.globat.com/blog/2011/06/17/soap-vs-rest/

根据我的理解,两者都应该是同步的.在这两种情况下,客户端通过肥皂或休息来调用Web服务,客户端等待响应从服务返回.那么,如果soap支持异步行为而休息不支持呢?

java rest soap web-services

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

为什么主要垃圾收集比次要慢?

通过此链接已经消失但仍然混淆了小型和主要GC集合中实际发生的情况.

假设我有年轻一代的100个对象,其中85个对象是无法访问的对象.现在,当Minor GC运行时,它将回收85个对象的内存并将15个对象移动到较旧的(终身)代.

现在有15个活动对象存在于老一代中,其中3个无法访问.说主要GC发生.它将保留15个对象,并回收3个无法访问的对象的内存.据说主要GC比次要GC慢.My question is why ? Is it because of major GC happens on generally greater number of objects than minor as minor gc occurs more frequently than major?

根据理解major GC should be faster as it needs to do less work即从无法到达的对象中回收内存而不是次要GC,因为年轻一代的死亡率很高.

java garbage-collection

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

java.lang.OutOfMemoryError GC开销限制超过了Java堆空间?

java.lang.OutOfMemoryError:Java堆空间的含义 该消息表示应用程序仅需要比其正常运行所需的Java堆空间更多的空间。

java.lang.OutOfMemoryError:超出GC开销限制的意思是 此消息表示由于某种原因,垃圾收集器占用过多的时间(默认情况下为该进程所有CPU时间的98%),并且每次运行都恢复很少的内存(默认情况下为堆的2%)。在内部,这还意味着当应用程序仅需要比其正常运行可用的Java堆空间更多的空间时。

所以我的问题是以上两种情况中的哪一种会被触发?

所以这是我的理解,何时会根据情况抛出特定的异常:

假设我分配了1GB的堆大小。当前正在使用的堆内存为970 MB。一个线程启动了(JVM不预先知道它将消耗多少内存)。现在,GC可以采取以下步骤之一

1)JVM开始分配内存,然后在某一时间耗尽1GB的内存并抛出 java.lang.OutOfMemoryError: Java heap space

2)GC会提前运行,并尝试释放一些内存,因为它知道当前正在使用的内存已接近1 GB分配的堆。但是在随后的每次运行中,它不能释放超过2%的空间。然后它会抛出java.lang.OutOfMemoryError: GC overhead limit exceeded

在我的问题中我的理解正确吗?

java heap garbage-collection

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

连接关闭时活动事务的行为?

如果调用close方法并且有一个活动事务,那么活动事务会发生什么?他们会被提交还是回滚?

java jdbc

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

在Java中静态方法与实例方法的决定?

根据我的理解,我们应该只在处理对象状态即实例变量时使用方法.如果方法确实处理对象的状态,则应始终将它们声明为类方法,即static.但仍然在大多数项目中,我已经看到了从未在实例变量上运行的方法,它们也被声明为实例方法(基本上这些方法正在做什么,它们正在使用一些方法参数并在那些方法上进行一些处理并调用其他一些课程.)它说. 这些方法不应该声明为类方法,即静态?

java

5
推荐指数
3
解决办法
7019
查看次数

可外部化或可序列化?

通过http://geekexplains.blogspot.com/2008/06/diff-between-externalizable-and.html上的文章后,我知道Externalizable比Serializalable更好,因为它提供了更好的代码控制,也更快.所以Externalizable应该是preizable而不是Serializable,前提是类定义没有改变.但是当我在任何项目中看到时,我发现只使用Serializable接口.它是无知还是Serializalable提供了一些我缺少的其他优势?

java serialization

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

对数据库事务中不同隔离级别的一些澄清?

下面是从书面声明维基百科的文章隔离REPEATABLE READS

在此隔离级别中,基于锁的并发控制DBMS实现保持读取和写入锁定(在选定数据上获取),直到事务结束.但是,范围锁定不受管理,因此可能会出现幻像读取现象(见下文).

我的问题是交易何时开始和结束.

如果我们在同一个链接上采用REPEATABLE READS隔离级别的非可重复读取的示例,根据我的理解,当第一个查询被触发时,trnsaction 1开始,即SELECT * FROM users WHERE id = 1.DBMS将保持对users表的锁定,直到并且除非事务结束.这里通过结束 我的意思是,当连接会rolledback或完成不COMMITED SELECT * FROM users WHERE id = 1.到那时交易2会等待吗?


问题2: - 现在,如果我们考虑隔离级别和他们的行为,如下所示(在同一链接)

Isolation level     Dirty reads   Non-repeatable   Phantoms
Read Uncommitted    may occur     may occur        may occur
Read Committed      -             may occur        may occur
Repeatable Read     -             may occur        -
Serializable        -             -                -
Run Code Online (Sandbox Code Playgroud)

根据我的理解,最可靠的是Serializable然后是Repeatable Read然后Read Committed但我仍然看到了使用Read Committed的应用程序.这是因为Serializable和Repeatable Read的性能与Read Committed相比是不好的,因为在serializable中它将是顺序的,并且在事务必须等待另一个事务释放锁的情况下.对?因此,为了获得最佳效果,我们可以将隔离级别用作Read Committed with SELECT FOR UPDATE(以实现可重复读取).在读取提交的隔离级别的情况下,如果我们需要,我们不确定如何实现幻像读取?

sql oracle concurrency transactions isolation-level

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

一个人可能需要自定义类加载器的场景?

我正在寻找一个简单的场景,何时需要创建自定义类加载器?

除此之外,只是想确认甚至bootstrap和应用程序类加载器是否在内部扩展了java.lang.ClassLoader?

java jvm

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