我想使用BigDecimal来表示低延迟交易应用程序中的任意精度数字,如价格和金额,每秒有数千个订单和执行报告.
我不会对它们进行很多数学运算,所以问题不在于BigDecimal本身的性能,而在于大量BigDecimal对象会如何影响应用程序的性能.
我担心的是,大量短命的BigDecimal对象会给GC带来压力并导致CMS收集器中更大的Stop-The-World暂停 - 这绝对是我想要避免的.
您能否确认我的疑虑并建议使用BigD的替代方案?此外,如果您认为我的担忧是错误的 - 请解释原因.
更新:
感谢所有回答的人.我现在确信使用BigDecimal会损害我的应用程序的延迟(即使我仍然计划测量它).
目前我们决定坚持使用"非常非OOP"解决方案(但没有精确命中) - 使用两个int
s,一个用于尾数,另一个用于指数.这背后的基本原理是基元放在堆栈上,而不是堆,因此不受垃圾收集的影响.
我们可以将套接字对象存储在Python字典中.我想创建一个套接字,存储套接字对象,做一些东西,然后从套接字读取(从字典搜索获取socketobject).
类org.jboss.jms.server.destination.QueueService和org.jboss.mq.server.jmx.Queue之间有什么区别?
我有一个JTable JLabel[][]
作为数据.现在我想检测双击JLabel或表格单元格(但只在其中一列中).如何在JLabel表格单元格上添加Action/MouseListener?
有什么办法可以在datagridview中添加进度条列.实际上我需要在datagridview中显示每行(任务)的进度.
让我知道一些示例代码或链接来实现此功能.
我正在将一个中型Java应用程序的构建从Ant迁移到Maven.我可以轻松地迁移基本构建内容,但我还想从Maven构建中创建安装程序包.最简单的方法是通过Ant插件调用原始的Ant脚本,但我想也许我应该首先考虑一下Maven的支持.
我需要为不同的平台创建几个不同的安装程序:
对于Linux现在我认为我们只有一个tar.gz和一些Bash脚本来启动守护进程 - Debian/RPM包会更好,可能还有依赖包定义.对于Windows安装程序,我们使用NullSoft安装程序.我不知道MacOS捆绑包现在是如何组装的.
是否有任何工具可以从Maven那里(或至少部分)做到这一点?
我可以理解,很多年前会有这种限制,但现在肯定可以很容易地增加这个限制.我们有对象的命名约定,但总会有一个案例出现在我们达到这个限制的地方 - 特别是在命名外键时.
有人真的知道为什么这不是一个更大的尺寸 - 或者它是否在11g更大?
显然答案是它会破坏当前没有防御编码的脚本.我说这是一个非常令人担忧的事情,甲骨文正在试图成为该数据库,想必这是什么样的,你必须不断提高的东西,否则你的产品会死一千削减死亡.
每当我在内部看到这种反对意见时,我认为是时候咬紧牙关并将其解决了.如果人们正在运行在升级Oracle版本时不检查或维护的脚本,那么让他们承受该选择的后果.为他们提供一个兼容性标志,大小达到4000,然后节省我浪费的时间,当我创建必须经常数到30的对象来检查名称是否'OK'.
在过去,我们在软件中遇到了各种内存泄漏.我们发现这些发生的主要原因是我们自己的"免费"方法的使用不正确,这些方法免费提供Queue-Message-Data等.
问题是,在我们最深入的工具函数中,有两种方法可以释放动态分配的内存,具有以下签名:
void free (void *pData);
void free (void **ppData);
两种方法基本上都做同样的事情,除了第二种方法首先取消引用数据.我知道只用这两个中的一个来做所有事情是可能的,但是我们可以说这个软件是多年前设计的,而且现在使用两者都是代码.
当有人实现对这些方法的调用时,问题就出现了:
QueueMessage *pMsg;
pMsg = myQueue.read(...); // dynamically allocates space for the msg and fills it
// Do something
myQueue.free(&pMsg); // << WRONG!
上面的代码应该将指向消息的指针传递给free-method.基本上它可以工作,但由于编译器不知道在这种情况下使用哪个函数,它使用的free(void *pData)
方法然后尝试释放指针,而不是指针指向的内存.当然,解决方案很简单:或者
myQueue.free(pMsg);
myQueue.free((void**)&pMsg);
两者都有效.既然我已经描述了问题和解决方案,我想知道:有什么方法可以确保使用这些方法的程序员以正确的方式使用它们吗?我已经阅读了VS2005中的标题注释,它们非常有用,但似乎没有做我需要的.如果有一种方法可以在指针的引用传递给第一个方法时产生警告,那将是很好的,所以程序员至少得到一个暗示他的代码有问题的提示.
顺便说一句,我正在使用Microsoft VS2005,如果需要,可以升级到VS2008.它是迁移到VS2005的C++应用程序,因此与.NET兼容.
我们可以为自定义模块提供一组实例吗?
例如:我们可以input [15:0] a;
- 这会创建一个总线.我们可以为自定义模块做同样的事情,即DFF [15:0] d;
DFF是自定义模块吗?在这里,我打算创建16个DFF模块实例.
我有一个用C++编写的自定义Menu类.为了将代码分成易于阅读的函数,我正在使用Callbacks.
由于我不想将Singletons用作菜单的主机,因此我提供了另一个参数(目标),它将作为第一个参数提供给回调(缺少"this"引用的某种解决方法).
注册签名
AddItem(string s, void(*callback)(void*,MenuItem*), void* target = NULL)
Run Code Online (Sandbox Code Playgroud)
注册示例
menu->AddItem(TRANSLATE, "translate", &MyApp::OnModeSelected);
Run Code Online (Sandbox Code Playgroud)
处理程序的示例
/* static */
void MyApp::OnModeSelected(void* that, MenuItem* item) {
MyApp *self = (MyApp*)that;
self->activeMode = item->text;
}
Run Code Online (Sandbox Code Playgroud)
这种方法有什么可以考虑的吗?还有更好的吗?
java ×4
c++ ×2
.net ×1
bigdecimal ×1
c# ×1
callback ×1
coding-style ×1
datagridview ×1
installer ×1
jboss ×1
jms ×1
jtable ×1
maven-2 ×1
mouseevent ×1
oracle ×1
oracle10g ×1
parameters ×1
performance ×1
pointers ×1
python ×1
size ×1
swing ×1
verilog ×1
winforms ×1