日期:2014-05-20  浏览次数:20768 次

越深入java 就觉得java做得越烂(个人觉得应当做得更好)
近段时间,项目要求对java的内存有要求,客户希望不要老是要他们扩大内存,所以此过程中了解了一些问题。
越想觉得,java越不是。

1,基础对象占有内存 byte,char,short,int,long,float,double分别为 1,2,2,4,8,4,8,byte;
  包括后Byte,Short,Integer,Long....等分别为 16,16,16,16,都是byte
  本来是 1字节的 byte包装后占 16字节!! 太不象话了,白用我的内存。除了一个Object 8byte指针其它浪费。
2, Object 8byte指针,就算定义个空对象,也一样占8byte 我觉得一个指针要 8个字节吗?有必要吗?我的内存啊。
  2^64= 18446744073709551616 byte =17179869184G 有可能用这么大的内存地址吗?(欢迎内行发言)。
  个人觉得:6个byte足也,281474976710656 = 262144G 不知道有什么难处要用 8byte.
3, Byte 用了 16字字节,真是想不通:8(指针)+8;浪费7byte
4, Short用了 16字字节,真是想不通:8(指针)+8;浪费6byte
5, Integer 用了 16字字节,真是想不通:8(指针)+8;浪费4byte
6, Long 用了 16字字节,:8(指针)+8;没浪费。
7, Float 用了 16字字节,真是想不通:8(指针)+8;浪费4byte。
8, Double 用了 16字字节,:8(指针)+8;没浪费。
9, BigDecimal 用了 32字字节,:8(指针)+24;除指针外 16不够? 太猛了吧?吃内存啊!!!
10,object = new String(); 用了 40 字字节,:8(指针)+32;好象内存没花钱一样。
11 int[] a =new int[]{0}; 也是16字节
11 long[] a =new long[]{0}; 也是24字节

这么基础的东西,做得这样烂,java倒底怎么了? 难道为吃内存而生? 

现在知道,为什么java在游戏上插不上足,这样根本是不行的。

不用对象,又难以区分数据库为空的数据,真是进退两难。
为什么java不在新版本上来个新架构啊,这样下去只有一条:死.........



------解决方案--------------------
学习....
------解决方案--------------------
汗啊,真不知道你是怎么算出来的
算这个有意义吗?你认为你算的准确吗?
你以为java就只吃了你列出的那些内存吗?
得了,你不如去搞C吧,内存你自己控制,想怎么搞怎么搞
哈哈~
------解决方案--------------------
哇。。
------解决方案--------------------
楼主是如何确定其大小的?
------解决方案--------------------
不错,学习了。
------解决方案--------------------
lz太猛了,能告诉大家你怎么算出来的吗?
------解决方案--------------------
硬件成本越来越低了,杞人忧天啊
------解决方案--------------------

我认为不是别人做的不好,而是你自己的设计可能存在着不周全而造成的。呵呵。。。
------解决方案--------------------
不用对象也行啊。
只要你愿意把1 个方法 public void h(Number arg),换成 8个方法来写。
public void h(byte arg)
public void h(short arg)
……
当涉及到范型的时候,本来一个类就实现的设计,换成8个类来写。
------解决方案--------------------
真的假的啊...现在内存都这么大了...这么算来算去有意思吗???
------解决方案--------------------
到了必要时,会自动调用 GC的,

现在我们的系统日产数据: 300多万条(20多列),内存数据放得太多,服务器受不了。客户已经把内存加到 4G了。 
....你产生了那么多数据,难道全部保存到内存中,也太强了吧
------解决方案--------------------
很想知道楼主是用什么方法得出这样的结论的??
------解决方案--------------------
不要总是用过程思维,OO都广告了多少年了

这些包装过后的东西:Byte,Short,Integer,Long
是对象,对象就有属性和方法,怎么会是指针+数据长度.........

再说了
你拿一个对象去和基本类型比内存占用,有意义吗?

面向对象编程的目的是什么??

------解决方案--------------------
Java code
你比sun公司还牛

------解决方案--------------------
java将来会进步的
------解决方案--------------------
探讨
Java code你比sun公司还牛

------解决方案--------------------
探讨

如果大系统连操作系统都支持不了多大的内存,现在我们的系统日产数据: 300多万条(20多列),内存数据放得太多,服务器受不了。客户已经把内存加到 4G了。


------解决方案--------------------