Gson用户指南声明我们应该为任何类定义默认的no-args构造函数以正确使用Gson.更重要的是,在Gson 类的javadoc中,InstanceCreator如果我们尝试反序列化缺少默认构造函数的类的实例,那么将抛出异常,我们应该InstanceCreator在这种情况下使用.但是,我尝试使用缺少默认构造函数的类来测试使用Gson,并且序列化和反序列化工作都没有任何问题.
这是deserializaiton的一段代码.没有非args构造函数的类:
public class Mushroom {
private String name;
private double diameter;
public Mushroom(String name, double diameter) {
this.name = name;
this.diameter = diameter;
}
//equals(), hashCode(), etc.
}
Run Code Online (Sandbox Code Playgroud)
和测试:
@Test
public void deserializeMushroom() {
assertEquals(
new Mushroom("Fly agaric", 4.0),
new Gson().fromJson(
"{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.
所以我的问题是:我是否真的可以使用Gson而不需要默认构造函数,或者在任何情况下它都不起作用?
在Java中,有没有办法获得参考地址,比方说
String s = "hello"
Run Code Online (Sandbox Code Playgroud)
我可以获取s本身的地址,也可以获取引用引用的对象的地址吗?
我有这样的方法:
public void getSomething(){
...
}
Run Code Online (Sandbox Code Playgroud)
我想扔一个Exception内心getSomething().编译器不允许我这样做,因为我的方法不允许Exception在那里抛出.但我需要Exception为我的测试抛出一个子类(我不能抛出Unchecked Exception).这显然是一个黑客,但我需要它进行测试.我试过EasyMock,但它也不允许我这样做.任何想法如何做到这一点?
谢谢Sean Nguyen
有些语言支持足够强大的类型系统,他们可以在编译时证明代码不能解决其边界之外的数组.我的问题是,如果我们要将这样的语言编译到JVM,是否有某种方法可以利用它来提高性能并删除每次访问阵列时发生的数组边界检查?
1)我知道最近的JDK支持一些数组绑定检查消除,但由于我在编译时知道某些调用是安全的,我可以更安全地删除.
2)有些人可能会认为这不会对性能产生太大影响,但肯定会有所影响,尤其是在阵列/计算等重大应用中,例如科学计算.
关于铸造的同样问题.我知道某些东西是某种类型,但Java并不是因为它的有限类型系统.有没有办法告诉JVM"信任我"并跳过任何检查?
我意识到可能没有办法这样做,因为JVM通常是分布式的,用这个功能修改JVM是否合理?这件事已经完成了吗?
这是为JVM编译更强大的类型语言的挫折之一,它仍然受到Java限制的阻碍.
我前几天穿过sun.misc.Unsafe包,惊讶于它能做些什么.它的存在给我留下了一些问题.
有没有充分的理由使用不安全的包裹?或许更具体的问题是,您可能需要它的情况.如果你确实需要它,那是不是说明你的设计可能有问题呢?为什么甚至包括在内?
服务器环境
Linux/RedHat
6 cores
Java 7/8
Run Code Online (Sandbox Code Playgroud)
关于申请:
我们正在开发一个使用Java的低延迟(7-8毫秒)高速交易平台.在满足算法条件后发送多腿订单
问题
使用TCP/IP java.net.SocketAPI(使用java.io.OutputStream.write(bytes[] arg0))向交换机发出的订单.Profiler测量记录为5-7微秒,根据我们的低延迟要求,这是非常高的.我们没有像在stacktrace中发布的一个问题中所建议的那样使用setPerformancePreferences()api.
题
我正在努力理解sun.misc.Unsafe的文档 - 我想因为它不适合一般用途,没有人真的为让它可读而烦恼 - 但实际上我真的需要一种方法来找到一个元素的地址一个数组(以便我可以将指针传递给本机代码).有没有人有任何工作代码这样做?它可靠吗?
我有一个程序加载在内存中.现在我想直接访问内存并更改该程序内存中的OPCODE和DATA.为此,我需要编写一个Java程序.
你能告诉我这是否可行?如果是,请告诉我如何编写这样的程序.
提前致谢!
是否可以自己执行内存管理.例如,我们在堆空间之外分配一块内存,这样它就不受GC的影响.我们自己负责从这块内存中分配/释放对象.
有些人指出了像Jmalloc/EHcache这样的框架.实际上我更想了解他们实际上是如何做到的.
我可以使用一些直接方法甚至是一些间接方法(例如,首先序列化java对象).
Java 5引入了一些并发原语,如比较和交换,比较和设置(一起作为CAS)和其他一些.
据我所知,所有这些操作都保证是原子的.因此,对于每个操作,似乎必须有一个JVM字节代码指令?
我正在查看字节码指令列表,但没有找到像CAS这样的方法.
不确定,我说CAS必须有单字节代码指令,或者CAS机制在java中执行/实现的方式有何不同?
我在某处读到x86处理器具有高速缓存一致性,并且可以在每次写入时同步多个内核的字段值.
这是否意味着如果我们计划仅在x86处理器上运行,我们可以在不使用java中的'volatile'keywoard的情况下进行编码?
更新:
好吧,假设我们忽略了指令重新排序的问题,我们是否可以假设在x86处理器上不存在对核心不可见的非易失性字段的分配问题?