问题列表 - 第18374页

在什么时候值得重用Java中的数组?

在值得重用之前,缓冲区需要有多大的缓冲区?

或者,换一种方式:我可以重复分配,使用和丢弃byte []对象或运行池来保存和重用它们.我可能会分配很多经常被丢弃的小缓冲区,或者一些不会被丢弃的大缓冲区.汇集它们的大小比重新分配要便宜,小分配与大分配相比如何?

编辑:

好的,具体参数.说英特尔酷睿2双核CPU,最新的虚拟机版本,适用于操作系统.这个问题并不像听起来那么模糊......一些小代码和一个图表可以回答它.

EDIT2:

你发布了很多很好的一般规则和讨论,但这个问题确实要求数字.发布'em(和代码)! 理论很棒,但证据就是数字.如果各个系统的结果有所不同并不重要,我只是在寻找一个粗略的估计(数量级).似乎没有人知道性能差异是1.1,2,10或100+的因素,这是重要的.对于使用大型阵列的任何Java代码来说都很重要 - 网络,生物信息学等.

建议获得良好的基准:

  1. 在基准测试中运行之前预热代码.应该至少调用1000次10000次方法以获得完整的JIT优化.
  2. 确保基准测试方法运行至少1 10秒,并尽可能使用System.nanotime,以获得准确的计时.
  3. 在仅运行最少应用程序的系统上运行基准测试
  4. 运行基准测试3-5次并报告所有时间,因此我们看到它是多么一致.

我知道这是一个模糊且有点苛刻的问题.我会定期查看这个问题,答案会得到评论并持续评分.懒惰的答案不会(见下面的标准).如果我没有任何彻底的答案,我会附上一笔赏金.无论如何,我可能会额外奖励一个非常好的答案.

我所知道的(不需要重复):

  • Java内存分配和GC速度快,速度越来越快.
  • 对象池曾经是一个很好的优化,但现在它在大多数时候都会损害性能.
  • 对象池"通常不是一个好主意,除非创建对象很昂贵".Yadda yadda.

我不知道的是:

  • 我期望在标准的现代CPU上运行(MB/s)内存分配的速度有多快?
  • 分配大小如何影响分配率?
  • 分配数量/大小与池中重用的收支平衡点是什么?

路由到ACCEPTED答案(越多越好):

  • 最近的白皮书显示了现代CPU上的分配和GC数据(最近一年左右,JVM 1.6或更高版本)
  • 我可以运行一个简洁而正确的微基准的代码
  • 解释分配如何以及为何影响性能
  • 真实世界的例子/轶事来自于测试这种优化

上下文:

我正在开发一个库,为Java添加LZF压缩支持.该库通过添加额外的压缩级别(更多压缩)以及与来自C LZF库的字节流的兼容性来扩展H2 DBMS LZF类.我正在考虑的一件事是,是否值得尝试重用用于压缩/解压缩流的固定大小的缓冲区.缓冲器可以是~8kB,或~32kB,并且在原始版本中它们是~128kB.可以为每个流分配缓冲器一次或多次.我正在试图找出我想如何处理缓冲区以获得最佳性能,并着眼于将来可能的多线程.

是的,如果有人有兴趣使用它,库将作为开源发布.

java optimization performance memory-management

31
推荐指数
2
解决办法
7256
查看次数

R和每日项目

我现在正在阅读R的一些书籍,但我想知道我是否可以使用这种语言,因为我使用的是Perl或Ruby.像:

  • 图像处理
  • 文件压缩
  • 使用API
  • 与互联网互动

但通常和简单(如在Perl或Ruby中)做这样的事情?

PS:我非常喜欢这种语言,因此我想在我的个人项目中使用它并将其传播给我的朋友和互联网.

r project

2
推荐指数
1
解决办法
202
查看次数

有没有适用于Android的Lite SVG查看器?

Android是否支持查看SVG文件或Android平台是否有任何第三方SVG查看器?

svg android

8
推荐指数
1
解决办法
8570
查看次数

是否有陷阱"陷阱"?

我知道,给予足够的情况下,人们可以希望建设性地使用(即恢复)从段错误条件.

但是,努力值得吗?如果是,在什么情况下?

linux segmentation-fault

5
推荐指数
4
解决办法
3103
查看次数

即使我尝试返回值,__ getattr__也会一直返回None

尝试运行以下代码:

class Test(object):
def func_accepting_args(self,prop,*args):
    msg = "%s getter/setter got called with args %s" % (prop,args)
    print msg #this is prented
    return msg #Why is None returned?

def __getattr__(self,name):
    if name.startswith("get_") or name.startswith("set_"):
        prop = name[4:]
        def return_method(*args):
            self.func_accepting_args(prop,*args)
        return return_method
    else:
        raise AttributeError, name

x = Test()
x.get_prop(50) #will return None, why?!, I was hoping it would return msg from func_accepting_args 
Run Code Online (Sandbox Code Playgroud)

任何人都解释为什么没有返回?

python metaprogramming

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

MAMP mySQL Snow Leopard中的Ruby On Rails

我正在尝试找到在MAMP服务器上运行Ruby on Rails并使用MAMP的mySQL数据库的分步说明.我也在雪豹上.我已经阅读了Hivelogic关于此的文章,但我真的不想编译rails,ruby和mySQL.

任何人都有任何建议

mysql mamp ruby-on-rails

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

C#内存并处理相关问题

我有以下一段代码,只是想查看谁将调用dispose?它是自动调用的.

ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(button, toolTipText);
Run Code Online (Sandbox Code Playgroud)

还要说我创建一个Timer局部变量,谁会调用dispose,内存泄漏怎么样,如果我立即调用dispose,那么timer事件就不会被触发.

我是否需要确保在调用计时器事件处理程序中调用,即使我没有对timer变量的任何引用.我还需要取消注册该计时器的事件处理程序.

编辑:

  • 但是如果我调用它,如何在ToolTip上调用dispose将无法显示.
  • 如果我没有任何参考,也为什么我需要处理Timer.
  • 我是否还需要取消注册计时器事件处理程序?
  • 保持引用也会增加类内存占用.

c# dispose

0
推荐指数
1
解决办法
1637
查看次数

持久化java对象最简单的方法是什么?

现在我有java程序,其类目前是POJO并存储在易失性存储器中.这些都需要坚持下去.据我所知,两个流行的选择是JDO和Java Persistence API.对于那些对SQL,Torque等知之甚少的人来说,这是为程序数据添加持久性的最简单方法吗?

java persistence object-persistence jdo apache-torque

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

需要.NET数据库版本控制脚本运行器

我正在寻找版本控制数据库,并且遇到了关于如何执行此操作的常规文章(编码恐怖,代码颂歌等).这对我来说都很有意义,但是我正在尝试找一个能为我运行sql脚本的脚本运行器.所有这些文章都提到了自动运行它们的东西,但它们都没有提出任何建议.

有没有人知道运行这些脚本的任何工具?理想情况下,以下列方式工作:

  1. 运行事务中的所有内容,因此如果任何单个更新失败,整个过程就会失败
  2. 我可以控制方案版本数据库表的名称
  3. 能够拥有一系列在升级时始终运行的脚本
  4. 可以作为自动化任务的一部分运行

    编辑

  5. 开源

sql database versioning database-versioning

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

BitmapFactory OOM让我疯狂

我一直在做很多搜索,我知道很多其他人都遇到了同样的OOM内存问题BitmapFactory.我的应用程序仅显示可用的4MB内存总量Runtime.getRuntime ().totalMemory().如果限制是16MB,那么为什么总内存不会增长以便为位图腾出空间呢?相反,它会抛出错误.

我也不明白,如果我有1.6MB的可用内存,根据Runtime.getRuntime().freeMemory()为什么我会收到错误说"VM不会让我们分配614400字节"?在我看来,我有足够的可用内存.

我的应用程序是完整的,除了这个问题,当我重新启动手机时,它会消失,以便我的应用程序是唯一运行的东西.我正在使用HTC Hero进行设备测试(Android 1.5).

在这一点上,我认为解决这个问题的唯一方法是以某种方式避免使用BitmapFactory.

任何人对此有任何想法或解释为什么当1.6MB的可用内存时VM不会分配614KB?

android out-of-memory android-bitmap

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