最近老板发现web项目(java,Hibernate,Spring)的性能是在是不行,想从数据库着手加速。他的想法是使用先获取到对象的物理地址,然后使用本地接口调用第三方的程序对这些对象进行排序还有查找操作。这种想法太诡异了,本来对象管理都已经托管给JVM了,而且从数据库读取对象都是交给Hibernate处理,外面根本就不可见。F**k The Boss!求教!
21 个解决方案
你们老板发疯了,性能的优化从对象的物理地址,几乎得不到改善。
得到物理地址之后,对象的操作基本上是计算型的了,jvm提供计算性能的不够强大,要是调用第三方的(SIMD之类),还是有改善的
使用sun.misc.Unsafe提供的几个方法获取到的地址不是物理地址,不知道是相对哪个地址。
还是做优化数据库吧 ,hibernate的优化不怎么好,用jdbc
或是ibats 试试
hibernate没问题的,他觉得蛋疼叫他把项目改成JDBC重来
是个有意思的想法。
虽然我个人觉得那几乎是扯淡。
就算能获知JVM中对象的物理地址,然后对其操作。
但怎么确保JVM不挪动这些对象?垃圾回收怎么办?
这样搞法,干嘛还要JAVA,干嘛还要SSH?重写个其他系统代价都比这小。
得不偿失。
你们老板干嘛的?让他直接去死,干嘛不直接搞0101机器码或者mov jmp的汇编啊
先查一下瓶颈在哪里,别跟现在医生一样,一瓶开塞露可以搞定的小毛病,非要搞到花费十几万,开好几刀的大手术
谢谢楼上各位!还想看看大家骂老板,所以过一段时间再结贴。
优化瓶颈更本不在这里,而是SQL语句,一个嵌套10层的连接查询就算是用C去写也不会快的。。
你们BOSS 是个 S B,可以说几乎什么都不懂,还乱来。。。
他要是真的不听你的,你就用C写吧,每种数据库都有C的接口的,不过是不统一的,
没关系,写过以后测一下时间和以前的对比一下,然后用这个去告诉他———— 他是一个什么都不懂的S B,然后辞职。
JVM 的性能不强大,难道你们自己写的性能能超过他?
你们得先实现一个 JVM 然后才能做接下去的事情,否则一切免谈。
最后没有实现要求的功能,不过有点小进展。sun.misc.Unsafe可以查看到对象的静态变量的地址,用allocateMemory方法能分配到空间。后来试图调用putObject,引起jvm崩溃,挂了。
结贴了,谢谢楼上的各位!