使用设计模式后的副作用

11-06-23 pye
                   

建立在抽象以及持有对象的设计模式具有灵活性大家都知道,

但是持有对象的同时也带来了线程不安全的副作用???

系统运行时产生了大量的碎片类,不会对内存造成问题么,会不会导致GC反复动作?

也没有办法缓存,缓存了也是白搭,大家是怎么考虑这个问题的?

                   

4
banq
2011-06-23 15:39

2011年06月23日 15:33 "@pye"的内容
持有对象的同时也带来了线程不安全的副作用 ...

那是多线程共享机制落后的副作用,现在Scala等并行语言已经抛弃,所以,这不是持有对象的副作用,而是实现对象的技术的能力不足。

关于大量碎片类,兵马俑terracotta都找到技术上解决方式,关键是使用IMDG,IMDG不同于缓存,而是一直驻留内存,使用JVM的永久代来持有对象。

pye
2011-06-28 11:18

永久持有。。。这个解决方法虽然有用,但很浪费,内存和磁盘的数据交换也可能引发巨大成本。

另外我还想知道,如果使用设计模式导致很多现成不安全的碎片类的话,对应用服务器的CPU,内存影响有多大?

比如并发数的急剧减少,GC的问题,out of memory的发生等等。

有人知道么?不吝赐教,谢谢。

banq
2011-06-30 08:32

解决你这个问题正是业界最新思路,可以说是面向对象思想发展推动基础结构语言的发展,有些大牛看到Scala就叫嚣面向对象已死,本末倒置。

使用Scala能解决对象并发锁,使用JVM能够有效管理持有内存(Scala运行在JVM上),至于如何优化碎片,最小化JVM暂停见:

如何驯服Java GC

[该贴被banq于2011-06-30 08:55修改过]

fjjiaboming
2012-02-19 11:10

???第一次听说这种怪思想.

一个思想的东东, 还引发你GC的使用问题...表示很不理解

那人家spring 怎么写代码的?

jee core patten 怎么实现?

如果真引发线程不安全问题, 我只想说,请好好读一读

Addison.Wesley.Java.Concurrency.in.Practice.May.2006