我一直听说Android应用程序应该尝试限制创建的对象数量,以减少垃圾收集器的工作量.有意义的是,您可能不希望创建大量的对象来跟踪有限的内存占用,例如在传统的服务器应用程序上,在几秒钟内创建100,000个对象并不是闻所未闻.
问题是我应该走多远?我已经看到大量的Android应用程序依赖于静态状态的例子,据说可以"加快速度".是否需要将垃圾收集的实例数量从几十个增加到几十个真的会产生很大的差异?我可以想象改变我的编码风格,现在创建了数十万个对象,就像你可能在一个完整的Java-EE服务器上,但依赖一堆静态状态(据说)减少垃圾收集的对象数似乎奇.
为了创建性能Android应用程序,改变编码风格真的需要多少钱?
我正在创建一个Java应用程序,它需要JVM之间的主从通信,可能驻留在同一台物理机器上.将在Java EE应用程序服务器(即JBoss)内部运行一个"主"服务器,该服务器将"从"客户端连接到它并动态注册自己进行通信(即主服务器将不知道该服务器的IP地址/端口奴隶因此无法提前配置).主服务器充当控制器,它将向从站执行工作,并且从站将定期响应通知,因此将进行双向通信.
我最初想的是基于RPC的系统,其中每一方都是服务器,但它可能变得复杂,所以我更喜欢一种机制,其中有一个打开的套接字,它们来回交谈.
我正在寻找一种低延迟的通信机制,其中消息主要是原始类型,因此不需要严格的序列化.这是我看过的:
有没有我缺少的技术?
编辑:还看了看:
现在我的ConversionPattern我有:
log4j.appender.A1.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss,SSS} %5p [%t] (%F:%L) - %m%n
Run Code Online (Sandbox Code Playgroud)
我想要做的还包括类的完整包名(%F:%L),但我在文档中找不到任何配置.我知道这会慢一点,但它只适用于调试,而不是系统何时投入生产.
我需要一个正则表达式专家来帮助解决这个问题.我在这里找到的例子和网络似乎无法正确.我正在使用PHP,我有以下正则表达式
/([^a-zA-Z0-9])GC([A-Z0-9]+)/
Run Code Online (Sandbox Code Playgroud)
这与GCABCD GC123A等项目相匹配.我需要做的是从中排除GCSTATS.所以基本上我希望它能像它一样工作,除了忽略正则表达式中的GCSTATS.
email一个字段很容易找到:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Run Code Online (Sandbox Code Playgroud)
所以,如果我们有一张桌子
ID NAME EMAIL
1 John asd@asd.com
2 Sam asd@asd.com
3 Tom asd@asd.com
4 Bob bob@asd.com
5 Tom asd@asd.com
Run Code Online (Sandbox Code Playgroud)
这个查询将给我们John,Sam,Tom,Tom,因为他们都有相同的email.
但是,我想要的是使用相同的name和重复name.
也就是说,我想得到"汤姆","汤姆".
我需要这个的原因:我犯了一个错误,并允许插入重复email和email值.现在我需要删除/更改重复项,所以我需要先找到它们.
如果我想在下面的正则表达式的括号内得到每个匹配的长度,我该怎么做?:
^\(\-\+\s\)\+
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以表格形式布局的数据来修改缓冲区中列的宽度.由于表格的前两行看起来像这样
DESIGN_ID DESIGN_YEAR SOURCE_REFERENCE
---------- ----------- ----------------
Run Code Online (Sandbox Code Playgroud)
我想使用正则表达式来查找每列的当前宽度.
我知道这是一个愚蠢的问题,但有没有人有一个优雅的(或非优雅的)LINQ方法将2D数组(object [,])转换为一维数组(object []),包括第一个维度2D阵列?
例:
// I'd like to have the following array
object[,] dim2 = {{1,1},{2,2},{3,3}};
// converted into this kind of an array... :)
object[] dim1 = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud) 我有一个字段'描述',可以有任何unicode字符的产品描述.如果我搜索包含国际字符的描述,并且具有LIKE条件(搜索的单词没有国际字符),我会得到以下结果:
例如:GEWÜRZTRAMINER是其中一个描述.当我做:
Select * from table where Description LIKE '%GEWURZTRAMINER%', it retrieves the entry.
Run Code Online (Sandbox Code Playgroud)
当我做:
Select * from table where Description LIKE '%GEWURZ%', the entry is not retrieved.
Run Code Online (Sandbox Code Playgroud)
(注意:搜索条件不包括Ü但有U)
有没有办法解决这个问题,以便我可以使用'%GEWURZ%'进行检索?
我想访问需要用户名/密码的URL.我想尝试用curl访问它.现在我做的事情如下:
curl http://api.somesite.com/test/blah?something=123
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.我想我需要指定一个用户名和密码以及上面的命令.
我怎样才能做到这一点?
我是linux和linux线程的新手.我花了一些时间谷歌搜索试图理解可用于线程同步的所有函数之间的差异.我还有一些问题.
我找到了所有这些不同类型的同步,每个同步都有许多锁定,解锁,测试锁等功能.
信号量是进程范围的,涉及文件系统(实际上我假设),并且可能是最慢的.
Futexes可能是互斥锁,自旋锁,seqlocks和rculocks使用的基本锁定机制.Futexes可能比基于它们的锁定机制更快.
自旋锁不会阻塞,从而避免上下文波动.然而,它们避免了上下文切换,代价是消耗CPU上的所有循环,直到释放锁定(旋转).出于显而易见的原因,它们应仅应用于多处理器系统.永远不要睡在螺旋锁中.
如果作者更改了工作所基于的数据,seq锁只会告诉您何时完成工作.在这种情况下,您必须返回并重复工作.
原子操作是最快的同步调用,并且可能在所有上述锁定机制中使用.您不希望对共享数据中的所有字段使用原子操作.当您访问多个数据字段时,您希望在锁定标志上使用锁(互斥锁,futex,旋转,seq,rcu)或单个原子操作.
到目前为止我对我的假设是否正确?
有谁知道各种选项的cpu周期成本? 我正在为应用添加并行性,因此我们可以获得更好的响应时间,但每个盒子运行的应用实例更少.表演是最重要的考虑因素.我不想使用上下文切换,旋转或许多额外的CPU周期来读取和写入共享内存.我绝对关心消耗的cpu周期数.
哪个(如果有的话)锁可以防止调度程序中断线程或中断...或者我只是一个白痴,所有同步机制都会这样做.什么样的中断被阻止?我可以阻止锁定线程的CPU上的所有线程或线程吗? 这个问题源于我担心中断一个线程,该线程持有一个非常常用的函数.我希望调度程序可能会调度任何可能会遇到此函数的其他工作者,然后因为它被锁定而阻塞.在带有锁的线程被重新安排并完成之前,将浪费大量上下文切换.我可以重新编写这个函数以最小化锁定时间,但它通常被称为我想使用锁来防止中断...跨所有处理器.
我正在编写用户代码...所以我得到软件中断,而不是硬件中断......对吗?我应该远离任何带有"irq"字样的功能(旋转/ seq锁).
哪些锁用于编写内核或驱动程序代码,哪些用于用户模式?
有没有人认为使用原子操作让多个线程通过链表移动是疯了? 我想通过原子方式将当前项指针更改为列表中的下一个项.如果尝试有效,则线程可以安全地使用当前项在移动之前指向的数据.现在,其他线程将沿列表移动.
futexes的?有没有理由使用它们而不是互斥体?
当没有工作时,是否有比使用条件睡眠线程更好的方法?
当使用gcc原子操作,特别是test_and_set时,我可以通过先进行非原子测试然后使用test_and_set来确认来提高性能吗? 我知道这将是特定于案例的,所以情况就是如此.有数以千计的工作项目.每个工作项都有一个初始化为0的标志.当一个线程具有对工作项的独占访问权时,该标志将为1.会有很多工作线程.一旦线程正在寻找工作,他们就可以非原子地测试1.如果他们读取1,我们肯定知道工作不可用.如果他们读零,他们需要执行原子test_and_set来确认.因此,如果原子test_and_set是500个cpu周期,因为它禁用流水线操作,导致cpu通信和L2缓存刷新/填充....并且一个简单的测试是1个周期....然后只要我有一个更好的比率当它磕磕绊绊已经完成的工作项目时,500比1 ......这将是一场胜利.
我希望使用互斥锁或自旋锁来保护代码段,我希望一次只能访问SYSTEM(而不是CPU)上的一个线程.我希望谨慎地使用gcc原子操作来选择工作并尽量减少互斥锁和自旋锁的使用.例如:可以检查工作项中的标志以查看线程是否已经工作(0 =否,1 =是或正在进行中).一个简单的test_and_set告诉线程它是否有效或需要继续.我希望在工作时使用条件唤醒线程.
谢谢!
java ×2
regex ×2
sql ×2
android ×1
c# ×1
c#-3.0 ×1
credentials ×1
curl ×1
dalvik ×1
duplicates ×1
java-ee ×1
jms ×1
linq ×1
linux ×1
locking ×1
log4j ×1
master-slave ×1
performance ×1
php ×1
rmi ×1
rpc ×1
sql-server ×1
t-sql ×1
vim ×1