当垃圾收集器在清理未引用的对象之前冻结应用程序线程时,所有线程都需要在执行时处于"安全点".我发现了大量描述安全点概念的文章,但很少有例子.安全点将放置在典型的Java方法中,为什么?更重要的是,安全点何处才能发生?
执行程序通常用于(短期运行)任务,但处理长时间运行的任务的最佳方法是什么,例如应该在应用程序的整个生命周期内运行的任务?
假设我有一个应用程序,在该应用程序中,在单独的线程上运行的任务每隔X秒轮询一个目录以进行更改.除非应用程序退出,否则此任务永远不应退出轮询.我该如何开始和管理呢?
会new Thread(theLongRunningTask).start()是一个如此糟糕的选择吗?
是否有任何工具可以查看JVM堆的不同代的对象统计信息?我正在研究潜在的内存泄漏,需要不同代的一些数据.我的用例是在旧代中拍摄对象的快照,等待,然后拍摄另一个快照进行比较.
JVisualVM提供了有关已创建对象的统计信息,但这对我没有多大帮助,因为我没有看到特定对象是否正在被提升或终身比它应该更快.
Jmap提供不同代的统计信息,但不提供基于对象的统计信息.在那个工具中,我只能看到老一代正在成长......
我正在尝试使用Hoard分配器来工作,但它似乎没有.我有一个基准测试应用程序,可以进行大量的动态内存管理.Hoard和glibc内存管理器的执行时间是一样的.这让我想知道我是不是做对了.
我做的是......
export LD_PRELOAD="/path/libhoard.so"
g++ main.cpp -O3 -o bm -lpthread -lrt
Run Code Online (Sandbox Code Playgroud)
我不应该链接到Hoard分配器吗?路径(在LD_PRELOAD中)是否重要,或者我可以拥有任何路径?
我正在运行Ubuntu 8.04和g ++ 4.2.4
干杯
没有人知道任何Linux命令(如grep)来确定Hoard是否正确加载,并且是否使用了实际的分配器?