[讨论] 内存可见性问题
RednaxelaFX
2014-04-09
gutigear 写道 没办法在同一环境下测试,java8不支持XP。。。java7用什么jvm参数可以实现循环不变量外提的优化效果?
另外我个人认为这是循环不变量优化的BUG,至少在这个场景中,这种优化是错误的。 Oracle JDK7/OpenJDK7还没在C1加这个优化,没参数可用。 我是在Win7上跑的测试能看到效果。 至于这个优化是不是bug…本来volatile放在那里就是提供同步保证用的,自己不加volatile来同步,编译器当然可以优化。不是bug。同一个例子如果给stop变量加上volatile就可以看到C1不会对它外提到循环外。 |
|
gutigear
2014-04-09
你说的有道理。
我比较倾向于JVM使用局部的保守的优化策略,开发者使用全局的结构的优化策略。 顺便请教一下,处理大量tcp连接(百万级别),如何从(JAVA)编程角度去减少内存占用和减轻GC压力?目前看到100万tcp长连接占用堆内存约10G,full GC十几秒,没办法用在生成环境。 RednaxelaFX 写道 gutigear 写道 没办法在同一环境下测试,java8不支持XP。。。java7用什么jvm参数可以实现循环不变量外提的优化效果?
另外我个人认为这是循环不变量优化的BUG,至少在这个场景中,这种优化是错误的。 Oracle JDK7/OpenJDK7还没在C1加这个优化,没参数可用。 我是在Win7上跑的测试能看到效果。 至于这个优化是不是bug…本来volatile放在那里就是提供同步保证用的,自己不加volatile来同步,编译器当然可以优化。不是bug。同一个例子如果给stop变量加上volatile就可以看到C1不会对它外提到循环外。 |
|
rxin2009
2014-04-09
gutigear 写道 你说的有道理。
我比较倾向于JVM使用局部的保守的优化策略,开发者使用全局的结构的优化策略。 顺便请教一下,处理大量tcp连接(百万级别),如何从(JAVA)编程角度去减少内存占用和减轻GC压力?目前看到100万tcp长连接占用堆内存约10G,full GC十几秒,没办法用在生成环境。 请问你是怎么模拟100万tcp长连接,是在一台机器上发起长连接的吗? |
|
gutigear
2014-04-09
十几台机器 + 虚拟网卡
rxin2009 写道 gutigear 写道 你说的有道理。
我比较倾向于JVM使用局部的保守的优化策略,开发者使用全局的结构的优化策略。 顺便请教一下,处理大量tcp连接(百万级别),如何从(JAVA)编程角度去减少内存占用和减轻GC压力?目前看到100万tcp长连接占用堆内存约10G,full GC十几秒,没办法用在生成环境。 请问你是怎么模拟100万tcp长连接,是在一台机器上发起长连接的吗? |