我正在调查我们的一个生产系统上的JVM崩溃,下面的hs_err_pid日志文件片段中的以下内存值代表什么?
Heap
par new generation total 1258624K, used 955445K [0x00000005c0000000, 0x00000006155b0000, 0x000000066aaa0000)
eden space 1118784K, 73% used [0x00000005c0000000, 0x00000005f1e52598, 0x0000000604490000)
from space 139840K, 98% used [0x000000060cd20000, 0x00000006153db100, 0x00000006155b0000)
to space 139840K, 0% used [0x0000000604490000, 0x0000000604490000, 0x000000060cd20000)
tenured generation total 2796224K, used 1745107K [0x000000066aaa0000, 0x0000000715550000, 0x00000007c0000000)
the space 2796224K, 62% used [0x000000066aaa0000, 0x00000006d52d4d90, 0x00000006c2e0c400, 0x0000000715550000)
compacting perm gen total 482944K, used 482943K [0x00000007c0000000, 0x00000007dd7a0000, 0x0000000800000000)
the space 482944K, 99% used [0x00000007c0000000, 0x00000007dd79fff0, 0x00000007dd7a0000, 0x00000007dd7a0000)
No shared spaces configured.
Run Code Online (Sandbox Code Playgroud)
我关注的是"压缩的perm gen"用法:它是指最大分配的perm gen堆使用的百分比,还是最大堆使用的百分比,还是其他什么?提供的百分比似乎是使用/总计的一个除法,这是分配的perm …
我有一个javax.servlet.http.HttpSessionListener的实现,它应该检测Struts项目中的用户会话失效/超时.
sessionDestroyed()似乎永远不会被调用,我可以通过删除我的JSESSIONID并刷新页面来重现这一点.我还发现让浏览器保持打开状态直到会话超时具有相同的效果.
该站点使用Java 1.5在JBoss 4.2.3.GA中运行.
我开始怀疑HttpSessionListener不能达到我的预期,我错过了什么?
编辑:
我的监听器在我的web.xml中注册如下:
<listener>
<listener-class>com.domain.web.listener.LogoutListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud) 我第一次尝试使用 Python 模拟模块(使用 pip 下载)。我在设置断言时遇到问题,我已将其范围缩小到以下代码:
class TestUsingMock(unittest.TestCase):
def setUp(self):
self.fake_client = mock.Mock()
def test_mock(self):
self.fake_client.copy = mock.Mock()
self.fake_client.copy("123")
self.fake_client.assert_called_with("123")
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
F
======================================================================
FAIL: test_mock (__main__.TestVCSDriver)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./mock_test.py", line 17, in test_mock
self.fake_client.assert_called_with("123")
File "/Library/Python/2.6/site-packages/mock.py", line 859, in assert_called_with
raise AssertionError('Expected call: %s\nNot called' % (expected,))
AssertionError: Expected call: mock('123')
Not called
Run Code Online (Sandbox Code Playgroud)
没有断言,一切正常。我究竟做错了什么?
我偶然发现了一个我可以解决的问题,但我不确定它为什么不起作用.
这是我试图使用的代码.为了简洁起见,已经剥离了字段.让我知道他们是否需要,我会把它们放回去:
#pragma once
#ifndef __PageStyle__
#define __PageStyle__
class PageStyle
{
public:
friend bool operator<(const PageStyle& lhs, const PageStyle& rhs);
};
bool operator<(const PageStyle& lhs, const PageStyle& rhs)
{
return (lhs.name < rhs.name);
}
#endif
Run Code Online (Sandbox Code Playgroud)
在我的源文件中,我做了类似这样的事情:
#include "PageStyle.h"
...
void PageStyleManager::loadPageStyles() {
std::set<PageStyle> pageStyles;
...
}
Run Code Online (Sandbox Code Playgroud)
编译好的代码,但链接器吐了出来:
1>PageStyleManager.obj : error LNK2005: "bool __cdecl operator<(class PageStyle const &,class PageStyle const &)" (??M@YA_NABVPageStyle@@0@Z) already defined in BaseContentFiller.obj
Run Code Online (Sandbox Code Playgroud)
BaseContentFiller是PageStyleManager的基类,也是以类似方式使用PageStyle的其他类.
经过深入研究后,我发现为了我的目的(使用STL集中的类)我毕竟不需要非成员朋友版本.我让操作员成为一个内联的公共成员,并且代码链接没有问题.
为什么会出现这个问题?我确保我使用过标题保护,这是我第一次遇到运算符重载的真实体验,我想知道我做错了什么.