我正在使用JMH基准测试框架(http://openjdk.java.net/projects/code-tools/jmh/)在我的代码上运行基准测试.我的理解是JMH在基准测试期间多次分配JVM,以便丢弃由JVM在执行期间执行的即时(JIT)分析构建的任何配置文件.
我理解为什么这在某些情况下很有用,如下所示(从http://java-performance.info/jmh/复制逐字):
默认情况下,JHM为每个试验(迭代集)分配一个新的java进程.这是为了保护测试免受先前收集的"配置文件" - 有关其他已加载类及其执行信息的信息.例如,如果你有2个类实现相同的接口并测试它们的性能,那么第一个实现(按测试顺序)可能比第二个(在同一个JVM中)更快,因为JIT替换在发现第二个实现之后,direct方法使用接口方法调用调用第一个实现.
但是,如果您反复对相同的代码进行基准测试,那么运行10个分别为20次迭代的分叉而不是1次分叉200次迭代是否有任何优势?
非常感谢,
丹尼
最近我一直在阅读MVC模式,并希望将它应用到我的iPhone开发中.然而,似乎有很多模式的变化,我不确定它应该如何应用.
据我所知,视图将通知控制器已执行的任何操作,控制器将依次更新数据模型(如果需要).每当发生数据更改时,数据模型都会通知视图,然后视图会相应地更新数据的显示.
在该基本模型中,控制器仅具有数据模型的知识.但是,我似乎无法弄清楚如何在我的iPhone应用程序中使用此设计.
以下页面提供了模式的替代版本,其中控制器同时了解数据模型和视图,并且模型和视图之间的所有通信都通过控制器执行.它似乎也表明模型和视图可以访问控制器.我是否正确建议数据模型通过某种形式的通知(通知或KVO)与控制器交互,并且视图通过操作与控制器交互?
这第二个模型是否正确?
http://www.bogotobogo.com/DesignPatterns/mvc_model_view_controller_pattern.html
非常感谢,
丹尼
我在尝试编译Objective-C程序时遇到了一些链接器问题,并认为我无法弄清楚问题的原因可能是由于对编译器进程的无知.
是否可以让某人概述编译过程中采取的步骤?
这是我目前了解的过程:
编译器将任何包含的.h文件的内容复制到它所定义的文件中.编译器不会跟踪是否已包含.h文件,因此它可能会多次包含在项目中.
任何.m文件都被编译为C等效代码(它们又被编译为目标代码).
链接器在.h文件中生成的声明与目标代码中的相应函数之间生成链接.通过在同名的.m文件中查找它们来确定适当的函数.
目标文件连接在一起形成可执行文件,确保main函数位于可执行文件的入口点.然后可能会删除任何声明以节省空间?
假设这是正确的(可能不是这样),这可能意味着您永远不应该#include .m文件,因为您可能最终会遇到多个方法定义,这会导致链接器出现问题.
感谢任何人可以带来的任何照明:).
干杯,
丹尼
我有几个实现两个接口的类.它们都实现了BaseInterface和其他一些特定于它们的接口.
我希望能够使用下面的loadClass方法来实例化.properties文件中引用的类,并调用它们都包含的公共方法(因为它们实现了BaseInterface).
public interface BaseInterface {
public void doBase();
}
public interface SpecificInterface extends BaseInterface {
public void doSpecific();
}
public class SpecificClass implements SpecificInterface {
public void doBase() { ... }
public void doSpecific() { ... }
}
public class LoadClass() {
private PropertiesLoader propertiesLoader = new PropertiesLoader();
public <C extends BaseInterface> C loadClass(String propertyName) {
Class<C> theClass;
// Load the class.
theClass = propertiesLoader.getPropertyAsClass(propertyName);
// Create an instance of the …Run Code Online (Sandbox Code Playgroud) 我正在使用JMH基准测试工具和hs_gc hotspot profiler.
我遇到的问题是我不确定输出计数器值是什么意思,并且无法在网上找到参考.
有人能指出我的规范方向或解释这些价值观吗?
我在下面粘贴了一个示例输出:
HS(GC) | difference: {
sun.gc.collector.0.invocations=16,
sun.gc.collector.0.lastEntryTime=37106821,
sun.gc.collector.0.lastExitTime=37109336,
sun.gc.collector.0.time=1528884,
sun.gc.collector.1.invocations=6,
sun.gc.collector.1.lastEntryTime=34419368,
sun.gc.collector.1.lastExitTime=35532892,
sun.gc.collector.1.time=6721387,
sun.gc.generation.0.space.0.used=872712984,
sun.gc.generation.1.space.0.used=5721334504,
sun.gc.generation.2.space.0.used=4848,
sun.gc.policy.avgBaseFootprint=5312,
sun.gc.policy.avgMajorIntervalTime=-667,
sun.gc.policy.avgMajorPauseTime=-41,
sun.gc.policy.avgMinorIntervalTime=-557,
sun.gc.policy.avgMinorPauseTime=1,
sun.gc.policy.avgOldLive=88064,
sun.gc.policy.avgPromotedAvg=421184,
sun.gc.policy.avgPromotedDev=364832,
sun.gc.policy.avgPromotedPaddedAvg=1515648,
sun.gc.policy.avgSurvivedAvg=1056640,
sun.gc.policy.avgSurvivedDev=-189440,
sun.gc.policy.avgSurvivedPaddedAvg=488320,
sun.gc.policy.avgYoungLive=2708352,
sun.gc.policy.liveAtLastFullGc=5721334504,
sun.gc.policy.liveSpace=2801664,
sun.gc.policy.majorGcCost=5,
sun.gc.policy.majorPauseYoungSlope=-3,
sun.gc.policy.minorGcCost=2,
sun.gc.policy.minorPauseTime=3,
sun.gc.policy.minorPauseYoungSlope=1,
sun.gc.policy.mutatorCost=-7,
sun.gc.policy.oldEdenSize=11534336,
sun.gc.policy.promoted=4584928,
sun.gc.policy.survived=6194624,
sun.gc.tlab.alloc=12852845,
sun.gc.tlab.fills=-15,
sun.gc.tlab.gcWaste=-100979,
sun.gc.tlab.maxFills=-22,
sun.gc.tlab.maxGcWaste=-100859,
sun.gc.tlab.maxSlowAlloc=-5,
sun.gc.tlab.maxSlowWaste=8826,
sun.gc.tlab.slowAlloc=-5,
sun.gc.tlab.slowWaste=8849}
Run Code Online (Sandbox Code Playgroud) 我有一个具有以下等价的 OWL 类(采用曼彻斯特表示法):
A
and not (hasB some
(B
and (hasC some C)
and (hasD some D)
and (hasList some
(OWLList
and (hasContents some
(OWLList
and (hasContents some
(E
and (hasValue some integer[< 200])
and (hasType value "xsd:integer"^^string)))
and (hasNext some EmptyList)))
and (hasNext some EmptyList)))))
我希望对此类强制执行封闭世界推理,以便任何不满足语句后剩余条件的个人都not将成为此类的成员。
为此,我尝试使hasC,hasD和hasList属性具有功能性,以便 OWL 知道不可能有这些属性的其他实例附加到此类。
不幸的是,该hasB属性可能会多次出现,因此无法对其进行限制。为了尝试“关闭”班级的这一部分,我oneOf在班级中添加了一条声明B,指定班级可以接受的所有可能的个人B。
在我看来,函数属性和oneOf语句的这种组合应该成功“关闭”该类。谁能告诉我我做错了什么?
我正在使用http://owl-workshop.man.ac.uk/acceptedLong/submission_12.pdf提出的 OWLList 类和相关属性。
非常感谢。
java ×3
jmh ×2
benchmarking ×1
cocoa-touch ×1
compilation ×1
interface ×1
iphone ×1
objective-c ×1
owl ×1
reflection ×1
semantic-web ×1