我试图了解Java中对象的内存占用量.我在Java中阅读了关于对象和内存的这个和其他文档.
但是,当我使用sizeof Java库或visualvm时,我会得到两个不同的结果,根据之前的参考文献(http://www.javamex.com),这些结果都不会超出我的预期.
对于我的测试中,我使用Java SE 7 Developer Preview一个64-bits Mac带有java.sizeof 0.2.1和visualvm 1.3.5.
我有三个班,TestObject,TestObject2,TestObject3.
public class TestObject
{
}
public class TestObject2 extends TestObject
{
int a = 3;
}
public class TestObject3 extends TestObject2
{
int b = 4;
int c = 5;
}
Run Code Online (Sandbox Code Playgroud)
我的主要课程:
public class memoryTester
{
public static void main(String[] args) throws Throwable
{
TestObject object1 = new …Run Code Online (Sandbox Code Playgroud) 如果在一段时间内未在给定键的主题中收到任何事件,我需要发送警报。使用 KafkaStream 解决此用例的最佳方法是什么?
我试过:
1) windowedBy与抑制运算符一起:
stream
.groupByKey()
.windowedBy(TimeWindows.of(Duration.ofMillis(1000)).grace(Duration.ZERO))
.count()
.suppress(Suppressed.untilWindowCloses(unbounded()))
.filter((k, v) -> v == 0)
.toStream()
.map((windowId, count) -> KeyValue.pair(windowId.key(), AlarmEvent.builder().build()))
.to(ALARMS, Produced.with(Serdes.String(), AlarmEvent.serde()));
Run Code Online (Sandbox Code Playgroud)
但似乎窗口不会关闭,直到过期后发生事件,因此在定义的超时之后无法发送警报。
2)使用带有标点符号的处理器API ,它似乎可以工作,但我只使用 TopologyTestDriver和advanceWallClockTime ()进行测试。不确定这个 advanceWallClockTime() 反映了实时提前,或者只会在事件接收时改变,从而回到 1) 中的问题。
3)如果标点符号有效,我想在 ValueTranformer 中使用它以从 DSL 拓扑中受益。但是,我遇到了如何从 ValueTransformer 中的 Punctuator 实例向下游转发事件?中描述的问题。。无法从标点符号实例向下游发送事件。
4)最后,我想到了为每个分区定期(例如每秒)注入一些虚拟事件,从而人为地强制内部时钟前进。这将使我能够使用干净简单的 DSL 窗口并抑制运算符。
在 KafkaStream 中,在实现ValueTransformer或ValueTransformerWithKey 时,在调用transform()时,我安排了一个新的 Punctuator。当执行Punctuator 的punctuate()方法时,我希望它使用上下文实例向下游转发事件。然而,当 DSL 拓扑的一部分时,上下文实例似乎没有定义。
关于如何使用 Transformer 执行此操作的任何线索?
在处理器中使用相同的逻辑,实现其工作的低级处理器拓扑。
在 ValueTransformerWithKey 中:
@Override
public Event transform(final String key, final Event event) {
this.context.schedule(timeout.toMillis(), PunctuationType.WALL_CLOCK_TIME, new MyPunctuator(context, key, event));
return null;
}
Run Code Online (Sandbox Code Playgroud)
在 MyPunctuator 中:
private class MytPunctuator implements Punctuator {
private String key;
private ProcessorContext context;
private Event event;
MyPunctuator(ProcessorContext context, String key, Event event)
{
this.context = context;
this.key = key;
this.event = event;
}
@Override
public …Run Code Online (Sandbox Code Playgroud)