锁定老帖子 主题:讨论:单例和静态方法的深入讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-10
star385 写道 超级潜水员 写道 蛋疼的忧虑,从没有担心class占内存及回收的,你就算有几亿行代码吧? 能占1G内存么?
天哪,如果一个程序假如就能占1G内存的话,完蛋了,还让不让操作系统干活了? 占内存的多少根代码行数没有直接关系吧 while (true) { Object o = new Object(); } 三行代码能占多少内存? 。。。。 你的操作系统1G内存吗? Eclipse都可以上1G以上。 |
|
返回顶楼 | |
发表时间:2011-01-10
star385 写道 超级潜水员 写道 蛋疼的忧虑,从没有担心class占内存及回收的,你就算有几亿行代码吧? 能占1G内存么?
天哪,如果一个程序假如就能占1G内存的话,完蛋了,还让不让操作系统干活了? 占内存的多少根代码行数没有直接关系吧 while (true) { Object o = new Object(); } 三行代码能占多少内存? 不知道你是不是极品至极点了? 你有见过多少程序是有几亿行代码的? 自古SB出二楼,真没错,附赠你一条咨讯。 【赛迪网讯】10月23日消息,一项分析发现,在最近发布2.6.27版本Linux内核之后,包括Linux内核文件在内的源代码行数已经超过了1000万行。 |
|
返回顶楼 | |
发表时间:2011-01-11
mercyblitz 写道 star385 写道 超级潜水员 写道 蛋疼的忧虑,从没有担心class占内存及回收的,你就算有几亿行代码吧? 能占1G内存么?
天哪,如果一个程序假如就能占1G内存的话,完蛋了,还让不让操作系统干活了? 占内存的多少根代码行数没有直接关系吧 while (true) { Object o = new Object(); } 三行代码能占多少内存? 。。。。 你的操作系统1G内存吗? Eclipse都可以上1G以上。 不想跟你做意气之争,你素质太低, 就事论事地说一下吧, 除去操作系统级别的进程和线程,你不可能只单独运行一个程序, 就以Java程序来说,你至少还需要运行虚拟机,运行虚拟机还需要相关的支持程序, 假如这些程序都需要占用1G以上,你有几个1G, 我见过一个公司的服务器,内存也才64G, 我都说了,代码行数和内存占用量没有直接联系,你还举那个例子有意义吗? |
|
返回顶楼 | |
发表时间:2011-01-11
最后修改:2011-01-11
star385 写道 mercyblitz 写道 star385 写道 超级潜水员 写道 蛋疼的忧虑,从没有担心class占内存及回收的,你就算有几亿行代码吧? 能占1G内存么?
天哪,如果一个程序假如就能占1G内存的话,完蛋了,还让不让操作系统干活了? 占内存的多少根代码行数没有直接关系吧 while (true) { Object o = new Object(); } 三行代码能占多少内存? 。。。。 你的操作系统1G内存吗? Eclipse都可以上1G以上。 不想跟你做意气之争,你素质太低, 就事论事地说一下吧, 除去操作系统级别的进程和线程,你不可能只单独运行一个程序, 就以Java程序来说,你至少还需要运行虚拟机,运行虚拟机还需要相关的支持程序, 假如这些程序都需要占用1G以上,你有几个1G, 我见过一个公司的服务器,内存也才64G, 我都说了,代码行数和内存占用量没有直接联系,你还举那个例子有意义吗? 没有实际经验别下起哄,还说别人素质低!(如果说的素质低,你可以看下我的回帖) 只有你的系统内存1G,JVM是禁止使用-Xmx1024M的,注意这里是Heap的大小,还不是整个JVM的大小。 给你一个例子: java -Xmx2048m -Xms2048m JVM启动的时候就利用了2G以上的内存。 这样的例子很多,难道一个10G的系统,只能给它1G的内存?要知道在X64的系统中,一个Object的对象占用64bit。 留4G内存给系统就足够了。 star385 写道 代码行数和内存占用量没有直接联系
也有关系的,一般的对象放在Heap区,但是还有JVM进程的Heap,代码有一个Code generation区,元信息放在Permanent区域。如果程序使用(可能是第三方包)字节码提升的话,要加Permanent区。-XX:PermSize。 说话的时候,有理有据,不知道还有瞎说,别人自然不会理睬你。(你想想为什么“超级潜水员”会那么说吧) |
|
返回顶楼 | |
发表时间:2011-01-11
mercyblitz 写道 star385 写道 mercyblitz 写道 star385 写道 超级潜水员 写道 蛋疼的忧虑,从没有担心class占内存及回收的,你就算有几亿行代码吧? 能占1G内存么?
天哪,如果一个程序假如就能占1G内存的话,完蛋了,还让不让操作系统干活了? 占内存的多少根代码行数没有直接关系吧 while (true) { Object o = new Object(); } 三行代码能占多少内存? 。。。。 你的操作系统1G内存吗? Eclipse都可以上1G以上。 不想跟你做意气之争,你素质太低, 就事论事地说一下吧, 除去操作系统级别的进程和线程,你不可能只单独运行一个程序, 就以Java程序来说,你至少还需要运行虚拟机,运行虚拟机还需要相关的支持程序, 假如这些程序都需要占用1G以上,你有几个1G, 我见过一个公司的服务器,内存也才64G, 我都说了,代码行数和内存占用量没有直接联系,你还举那个例子有意义吗? 没有实际经验别下起哄,还说别人素质低!(如果说的素质低,你可以看下我的回帖) 只有你的系统内存1G,JVM是禁止使用-Xmx1024M的,注意这里是Heap的大小,还不是整个JVM的大小。 给你一个例子: java -Xmx2048m -Xms2048m JVM启动的时候就利用了2G以上的内存。 这样的例子很多,难道一个10G的系统,只能给它1G的内存?要知道在X64的系统中,一个Object的对象占用64bit。 留4G内存给系统就足够了。 star385 写道 代码行数和内存占用量没有直接联系
也有关系的,一般的对象放在Heap区,但是还有JVM进程的Heap,代码有一个Code generation区,元信息放在Permanent区域。如果程序使用(可能是第三方包)字节码提升的话,要加Permanent区。-XX:PermSize。 说话的时候,有理有据,不知道还有瞎说,别人自然不会理睬你。(你想想为什么“超级潜水员”会那么说吧) 好,对于技术之争,就此作罢, 或许你误解了素质低的意思, 一个人的素质往往体现在他对待自己认为错误的观点的态度, 如果你认为我的观点是错误的,你可以用各种论据推翻我的观点, 而不是用侮辱的语言去损害别人的人格, 一个人发表过一次你不认同的观点,他不是SB, 发表过十次也不是, 对持有不同观点的人进行无礼谩骂的人往往才是。 |
|
返回顶楼 | |
发表时间:2011-01-11
star385 写道 mercyblitz 写道 star385 写道 mercyblitz 写道 star385 写道 超级潜水员 写道 蛋疼的忧虑,从没有担心class占内存及回收的,你就算有几亿行代码吧? 能占1G内存么?
天哪,如果一个程序假如就能占1G内存的话,完蛋了,还让不让操作系统干活了? 占内存的多少根代码行数没有直接关系吧 while (true) { Object o = new Object(); } 三行代码能占多少内存? 。。。。 你的操作系统1G内存吗? Eclipse都可以上1G以上。 不想跟你做意气之争,你素质太低, 就事论事地说一下吧, 除去操作系统级别的进程和线程,你不可能只单独运行一个程序, 就以Java程序来说,你至少还需要运行虚拟机,运行虚拟机还需要相关的支持程序, 假如这些程序都需要占用1G以上,你有几个1G, 我见过一个公司的服务器,内存也才64G, 我都说了,代码行数和内存占用量没有直接联系,你还举那个例子有意义吗? 没有实际经验别下起哄,还说别人素质低!(如果说的素质低,你可以看下我的回帖) 只有你的系统内存1G,JVM是禁止使用-Xmx1024M的,注意这里是Heap的大小,还不是整个JVM的大小。 给你一个例子: java -Xmx2048m -Xms2048m JVM启动的时候就利用了2G以上的内存。 这样的例子很多,难道一个10G的系统,只能给它1G的内存?要知道在X64的系统中,一个Object的对象占用64bit。 留4G内存给系统就足够了。 star385 写道 代码行数和内存占用量没有直接联系
也有关系的,一般的对象放在Heap区,但是还有JVM进程的Heap,代码有一个Code generation区,元信息放在Permanent区域。如果程序使用(可能是第三方包)字节码提升的话,要加Permanent区。-XX:PermSize。 说话的时候,有理有据,不知道还有瞎说,别人自然不会理睬你。(你想想为什么“超级潜水员”会那么说吧) 好,对于技术之争,就此作罢, 或许你误解了素质低的意思, 一个人的素质往往体现在他对待自己认为错误的观点的态度, 如果你认为我的观点是错误的,你可以用各种论据推翻我的观点, 而不是用侮辱的语言去损害别人的人格, 一个人发表过一次你不认同的观点,他不是SB, 发表过十次也不是, 对持有不同观点的人进行无礼谩骂的人往往才是。 ![]() 昨天晚上很晚回的,没有力气了,:-)! 我没有别的意思,就是问你的OS的问题。哥们你误会了,有伤害你的地方,向你道歉哦! ![]() |
|
返回顶楼 | |
发表时间:2011-01-11
真实环境中,大量的service靠spring实例化(单例)存在,试问不都是单例存在吗!你会觉得不合适吗?
|
|
返回顶楼 | |
发表时间:2011-01-11
kevin1988620 写道 对于类的内存占用,一向不再考虑的范围内,我在学校折腾java项目时,一向不管三期二十一,把hibernate,spring的jar包不加选择扔到lib下面。与这些jar中的类相比,自己设计的几个辅助类,实在是忽略不计。
而且如果运气不好,碰上out of memery,permgen space的时候,调整一下permsize就可以了。 我觉得内存方面主要要顾及的是往内存的static区域方对象,而不是类 你这个习惯工作中要注意了!很危险的! |
|
返回顶楼 | |
发表时间:2011-01-11
单例模式的出现,最开始是因为老版本的jvm在new对象的时候性能很不好,于是出现了单例模式!但是现在单例往往是做为服务类存在,往往需要多态但又不需要多实例的场景!
静态做为辅助类,在不需要多态的情况下使用静态! 其实现在项目中,楼主担心的问题基本可以忽略真真的程序瓶颈不是这些。 |
|
返回顶楼 | |
发表时间:2011-01-11
我的理解, 单例就是 static的封装, 然后只提供get方法供调用。。
举个例子, public static User user ; 这时候我们如果其他地方出现如下代码: val = null ; 这时候不就改变了val的值了。。 如果使用单例, private static User user ; public getVal(){ if(val==null){ user = new User(); } return va; } 这时候,使用者只能获取而不能改变它的值。 所以,使用单例只是保护这个变量而已。。 至于和空间之类的什么关系,我真不知道,无论单例还是static ,最后不都是一个 静态变量 。。 |
|
返回顶楼 | |