假设Java对象只占用对象引用的8个字节是正确的,只要它的所有成员都被设置为null或者成员的定义是否因为某种原因已经占用了实例中的空间?
换句话说,如果我有一大堆我希望节省空间的对象,我可以指望将未使用的成员设置null为减少内存占用吗?
我有以下两个用于构建图形的带注释的类:
@Entity
@Table(name = "Edge")
public class Edge
{
/* some code omitted for brevity */
@ManyToOne
@JoinColumn(name = "ixNodeFrom", nullable = false)
private Node _nodFrom;
@ManyToOne
@JoinColumn(name = "ixNodeTo", nullable = false)
private Node _nodTo;
/* some code omitted for brevity */
}
@Entity
@Table(name = "Node")
public class Node
{
/* some code omitted for brevity */
@OneToMany(mappedBy = "_nodTo")
private Set<Edge> _rgInbound;
@OneToMany(mappedBy = "_nodFrom")
private Set<Edge> _rgOutbound;
/* some code omitted for brevity */
}
Run Code Online (Sandbox Code Playgroud)
现在,当我建立图,我发出了两次查询或者从表获取所有行,并成立了父/子引用,为此我需要存储在的ID …
输入问题时,stackoverflow会向您显示一个它认为可能涵盖同一主题的问题列表.我在其他网站或其他程序中也看到了类似的功能(例如帮助文件系统),但我自己从未编写过类似的东西.现在我很想知道用什么算法.
我想到的第一种方法是将短语分成单词并查找包含这些单词的短语.在你这样做之前,你可能想丢掉无关紧要的词(比如'the','a','do'等),然后你会想要对结果进行排名.
嘿,等等 - 让我们为网页做,然后我们可以有一个... watchamacallit ... - 一个"搜索引擎",然后我们可以出售广告,然后......
不,说真的,解决这个问题的常用方法是什么?
Dijkstra的Shunting Yard算法用于解析中缀表示法并生成RPN输出.
我正在寻找相反的方法,将RPN转换为highschool-math-class样式中缀表示法,以便从数据库中表示RPN表达式,以便以可理解的方式为用户提供服务.
请节省您的时间,不要自己做算法,只需指出我似乎无法找到的教科书示例.从Shunting Yard算法向后工作并使用我对符号的了解,我可能能够找到解决方案.我只是在寻找快捷方式,所以我不需要重新发明轮子.
哦,请不要将此标记为"作业",我发誓我已经不在学校了!;-)
给出一些像这样的JS代码:
for (var i = 0; i < document.getElementsByName('scale_select').length; i++) {
document.getElementsByName('scale_select')[i].onclick = vSetScale;
}
Run Code Online (Sandbox Code Playgroud)
如果我们在循环之前将getElementsByName的结果放入变量然后在那之后使用变量,那么代码会更快吗?
我不确定这种效果在现实生活中有多大,结果来自于 getElementsByName通常是<10项.无论如何,我想了解潜在的机制.
此外,如果有两个选项还有其他值得注意的地方,请告诉我.
我有一个项目列表(下面的蓝色节点),由我的应用程序的用户分类.类别本身可以自行分组和分类.
得到的结构可以表示为有向无环图(DAG),其中项目是图表拓扑底部的汇点,顶部类别是源.请注意,虽然某些类别可能已经定义得很好,但很多都是用户定义的,并且可能非常混乱.
例:

(来源:theuprightape.net)
在该结构上,我想执行以下操作:
第一个似乎很简单:从节点开始,按照所有可能的路径到底部并收集那里的项目.但是,有更快的方法吗?记住我已经通过的节点可能有助于避免不必要的重复,但还有更多的优化吗?
我怎么去第二个呢?似乎第一步是确定集合中每个节点的高度,以确定在哪个(s)开始,然后找到包括集合其余部分的所有路径.但这是最好的(甚至是好的)方法吗?
维基百科上列出的图遍历算法似乎都关注于找到特定节点或两个节点之间最短或最有效的路由.我认为两者都不是我想要的,或者我只是没有看到这对我的问题有何影响?我还应该在哪里阅读?
或者,也许,我没有得到的是一元编码:
在Golomb或Rice编码中,N通过将数字除以另一个数字将数字拆分为两部分M,然后将该除法的整数结果编码为一元,其余为二进制.
在Wikipedia 示例中,它们使用42 as N和10 as M,因此我们最终q得到4(在一元中:1110)和r2 的余数(在二进制010中)的商,因此得到的消息是1110,010或8位(可以跳过逗号).42的简单二进制表示是101010或6位.
对我来说,这似乎是由于一元表示q总是必须比二进制更多位.
显然,我在这里错过了一些重要的观点.它是什么?
我的Maven项目中有三个模块(稍微简化):
模型和持久性显然取决于javax.persistence,但我认为应用不应该.
该javax.persistence依赖移动到顶层POM的dependencyManagement,因为它在多个子模块,其中我只引用条目出现部分.
让我感到惊讶的是,我必须在application设置范围时引用依赖关系provided,而我的范围是什么时候不必compile.
随着一个范围provided,如果我没有在清单中dependencies的应用,构建失败,从javac的错误消息:
com.sun.tools.javac.code.Symbol $ CompletionFailure:找不到javax.persistence.InheritanceType的类文件
这是怎么回事?
我在应用程序的大致相同的阶段在我的JVM中获得了段错误,但崩溃报告中的堆栈跟踪不同.但是,它似乎总是在GC期间发生.
由于崩溃发生在我尝试的所有三个JVM(OpenJDK 6,Oracle 1.6.0_25和1.7.0)以及每个两个GC(并行收集器和CMS),它发生在应用程序的同一区域,我想,如果我可以找到GC试图收集的内容,我可能会在我的代码中发现导致此崩溃的一些特性.
java java-native-interface garbage-collection jvm segmentation-fault
我正在开发一组应用程序,这些应用程序一起工作以创建用于处理计量数据的系统.有几个原因我希望它们松散耦合,系统应该可以被第三方扩展,因此应用程序将通过消息传递捆绑在一起.
我正在寻找一种消息传递系统,它提供(至少)C#,Java和Python中的绑定,并支持消息传递模式,如发布 - 订阅,保证传递,选择性消费者(如Peek in .Net Messaging).
据我所知,JMS或.Net Messaging没有任何问题,只是它们仅适用于.Net/Java.
系统应该让我控制在设置通道时使用哪种传输机制(套接字,消息队列等).我希望能够扩展到远程机器并使用本地交通设施加快速度.
如果我找不到合适的东西,我将不得不自己动手.我可能会使用Google的协议缓冲区进行序列化.如果有人对技术方案有其他建议,请开火.
哦,是的 - 我想在每个频道或每个消息的基础上进行可选加密.
ETA:感谢所有快速回复.我现在正在通过文档和宣传工作.有没有人使用过以下技术,结果是什么?
java ×4
algorithm ×3
optimization ×2
compression ×1
eclipselink ×1
function ×1
ipc ×1
javascript ×1
jpa ×1
jvm ×1
maven-2 ×1
memory ×1
messaging ×1
parsing ×1