我使用以下参数(以及其他参数)启动我的java代码(Vista中的1.6.0_16)-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs.我运行代码,我可以在日志中看到有两个OOM.
我知道的第一个因为我可以在stdout中看到正在创建hprof文件:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to ../logs\java_pid4604.hprof ...
Heap dump file created [37351818 bytes in 1.635 secs]
Run Code Online (Sandbox Code Playgroud)
然后,在代码结束时我得到另一个OOM,我捕获了这个,但是我没有创建第二个hprof文件.谁知道为什么?是因为我抓住了OOM例外吗?
基本上,我想回应一下<p style="color:FFFFFF">,或者可能是一个类的东西,但似乎解析器并不是真的喜欢它包含引号的事实,它很快就会破坏我的网站.是否有任何黑客可以绕过解析器规则,或者更好的解决方案?
干杯.
我正在尝试找到在使用NHibernate的Web应用程序中处理事务的最佳解决方案.
我们使用IHttpModule,在HttpApplication.BeginRequest中我们打开一个新会话,然后用ManagedWebSessionContext.Bind(context,session)将它绑定到HttpContext; 我们关闭并取消绑定HttpApplication.EndRequest上的会话.
在我们的Repository基类中,我们总是围绕我们的SaveOrUpdate,Delete,Get方法包装一个事务,例如,根据最佳实践:
public virtual void Save(T entity)
{
var session = DependencyManager.Resolve<ISession>();
using (var transaction = session.BeginTransaction())
{
session.SaveOrUpdate(entity);
transaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要在某个应用程序服务中的某个位置放置一个事务来包含多个存储库调用以保存,删除等,则这不起作用.
所以我们尝试使用TransactionScope(我不想编写自己的事务管理器).为了测试这是否有效,我使用外部TransactionScope,它不会调用.Complete()来强制回滚:
存储库保存():
public virtual void Save(T entity)
{
using (TransactionScope scope = new TransactionScope())
{
var session = DependencyManager.Resolve<ISession>();
session.SaveOrUpdate(entity);
scope.Complete();
}
}
Run Code Online (Sandbox Code Playgroud)
使用存储库的块:
TestEntity testEntity = new TestEntity { Text = "Test1" };
ITestRepository testRepository = DependencyManager.Resolve<ITestRepository>();
testRepository.Save(testEntity);
using (var scope = new TransactionScope())
{
TestEntity entityToChange = testRepository.GetById(testEntity.Id);
entityToChange.Text = "TestChanged"; …Run Code Online (Sandbox Code Playgroud) 我有两个或更多的列表.有点像这样:
listX = [('A', 1, 10), ('B', 2, 20), ('C', 3, 30), ('D', 4, 30)]
listY = [('a', 5, 50), ('b', 4, 40), ('c', 3, 30), ('d', 1, 20),
('A', 6, 60), ('D', 7, 70])
Run Code Online (Sandbox Code Playgroud)
我想获得移动这样的重复元素的结果:我的结果是从listX + listY获取所有列表,但是在重复的情况下,例如('A', 1, 10), ('D', 4, 30)listX 的元素被呈现或者在listY中退出.结果就这样吧
result = [('A', 7, 70), ('B', 2, 20), ('C', 3, 30), ('D', 11, 100),
('a', 5, 50), ('b', 4, 40), ('c', 3, 30), ('d', 1, 20)]
Run Code Online (Sandbox Code Playgroud)
(A, 7, 70)通过添加('A', 1, 10)和 …
任何支持编写单元测试代码的Java单元测试框架都是这样的:
Collection<AType> myCollection = objectUnderTest.doSomething();
assertCollectionContainsAtleast(myCollection, "a Expected value");
Run Code Online (Sandbox Code Playgroud)
意思是我想要的是附加某种匹配器的某种迭代支持.
我想知道它的真正含义以及如何使用它.
另一个问题是我所看到的断言
assert product.valid? product.errors.full_messages
和
assert product.valid?
Run Code Online (Sandbox Code Playgroud)
但我找不到那些断言的语法断言(product.errors.full_messages)的第二个arg是什么意思,或者它是arg for?
谢谢
我有一个经常使用.NET程序.这个程序有一个非常烦人的小错误,应用程序的开发人员无处可寻.
我在反射器中找到了问题的位置,只想在这里添加一个if语句,然后重新编译该程序.
最简单的方法是什么?
我尝试在反射器中使用导出功能,但它似乎并不完美.例如,缺少很多using-directives,并且不能正确导出来回转换为int的枚举.我相信我可以通过一些工作解决这个问题,但我想知道是否有更简单的方法来做到这一点.
更新:解决这个问题:
该程序是单个文件可执行文件
完成!我现在只使用固定程序几分钟但它似乎像以前一样工作除了bug :)
我还遇到了应用程序设置的一些问题.在%appdata%\ ProgramName中有一个名为ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs的文件夹,其中存储了所有设置.我的新可执行文件创建了一个这样的新文件夹,最后用不同的随机字母和默认设置.要复制之前使用的设置,只需将旧文件夹的所有内容复制到新文件夹即可.
登录时,请求的会话密钥会更改.
这使得难以使用会话,对于应该在登录时保持的活动,例如购物车,只有在结账时才会提示登录.
实现这样一个购物车的最佳方式是什么,它在登录时持续存在.一种解决方案是使用具有会话密钥和产品的表,并在登录时将用户与其关联.
它可能更简单,我觉得,特别是,你想要的只是坚持一个帖子请求.
由于RAM似乎是新磁盘,并且因为该声明也意味着现在认为对内存的访问速度与磁盘访问的方式类似,我确实希望最大化内存中的引用位置以用于高性能应用程序.例如,在排序索引中,我希望相邻值接近(不像说,在哈希表中),我也希望索引指向的数据也接近.
在C中,我可以使用专门的内存管理器来创建数据结构,就像(非常复杂的)Judy数组的开发人员一样.通过直接控制指针,它们甚至可以在指针值本身中编码附加信息.在Python,Java或C#中工作时,我故意将这种类型的解决方案中的一个(或多个)抽象级别委托给JIT编译器并优化运行时,为我做低级别的巧妙技巧.
尽管如此,我猜想,即使在这种高水平的抽象中,也有一些东西可以在语义上被认为是"更接近",因此可能实际上更接近于低水平.例如,我想知道以下(我在括号中的猜测):
int字段的对象数组和一个有两个int[]字段的对象之间的区别是什么?(这个例子可能是Java特定的)我开始在Java环境中对这些问题感到疑惑,但我的想法变得更加普遍,所以我建议不要将其视为Java问题.
那里!我正在使用swing/clojure构建一个图像处理应用程序,现在我需要开发一个图像面板,我可以在其中单击并计算数据.感谢coobird,我现在对如何用Java做了很好的想法,但我仍然没有遇到很多与Clojure集成的问题.
让我们来看看coobird如何建议我这样做.首先,我们应该在Java中扩展一个类.在clojure中,我们用proxy宏来做这个,所以我们有这样的事情:
(def painting-panel (proxy [JPanel] []))
下一步是创建类构造函数并设置一些变量.
我可以在代理的第二个参数之后定义函数,但是如何创建构造函数?绘图面板是这个类的名称(因此我应该创建的函数的名称)?
我该如何处理类变量?我应该let像我一样定义它们吗?
是this与super供我使用,像我一样下面?
(def painting-panel
(let [background-image (Image.)
point-clicked (Point.)]
(proxy [JPanel] []
(paintComponent [g]
(do ((.paintComponent super) g)
(doto g
(.drawImage background-image 0 0 nil)
(.fillRect (.x point-clicked) (.y point-clicked) 1 1))))
(painting-panel []; constructor?
((.addMouseListener this)
(proxy [MouseAdapter] []
(mouseClicked [e]
(do
(def point-clicked (.getPoint e))
(.repaint this)))))))))
建议和代码更正也欢迎!
谢谢!
java ×3
python ×2
.net ×1
c# ×1
clojure ×1
css ×1
django ×1
hprof ×1
html ×1
lisp ×1
login ×1
nhibernate ×1
optimization ×1
php ×1
recompile ×1
reflection ×1
ruby ×1
session ×1
swing ×1
transactions ×1
unit-testing ×1