新开发的系统需要控制每个时刻回收缓存的GC线程有且只有一个在运行,如果有多个线程同时运行,会造成系统崩溃。如果只有一个JVM进程那么很好办,简单的借助synchronized关键字就行了。可是我的系统要部署在多台服务器,每台服务器上部署多个实例上。而synchronized仅仅在单进程里有用。
考虑借助共享数据源redis实现功能。
redis提供一个方法,SETNX key...
分类:
其他好文 时间:
2015-07-03 19:16:10
阅读次数:
172
参 数
描 述
UseSerialGC
虚拟机运行在Client 模式下的默认值,打开此开关后,使用Serial +
Serial Old 的收集器组合进行内存回收
UseParNewGC
打开此开关后,使用ParNew + Serial Old 的收集器组合进行内存回收
UseConcMarkS...
分类:
其他好文 时间:
2015-07-03 10:41:32
阅读次数:
168
1、对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。
2、大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在Eden区和两个
Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。
3、长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会...
分类:
编程语言 时间:
2015-07-03 09:12:46
阅读次数:
171
1. jmap -heap pid
查看java 堆(heap)使用情况
using thread-local object allocation.
Parallel GC with 4 thread(s) //GC 方式 Heap Configuration: //堆内存初始化配置
...
分类:
其他好文 时间:
2015-07-02 17:27:39
阅读次数:
98
阿里云地图:http://gc.ditu.aliyun.com/geocoding?a= Google地图:http://ditu.google.cn/maps/geo?q= //已失效 Baidu地图: http://api.map.baidu.com/geocoder?address= Soso地图: ?http://api.map.qq.com/g...
JVM常用调试用参数:
–verbose:gc在虚拟机发生内存回收时在输出设备显示信息
-Xloggc:filename把GC相关日志信息记录到文件以便分析
-XX:-HeapDumpOnOutOfMemoryError当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError=";" 出现致命ERROR之后运行自定义命令
-XX:-PrintClassHistogram遇到Ctrl...
分类:
其他好文 时间:
2015-07-02 10:18:12
阅读次数:
146
跟踪收集算法:
复制(copying):
将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A。因为只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,不需要标记骤,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存。
标记清除(mark-sweep):
...
分类:
其他好文 时间:
2015-07-02 10:17:13
阅读次数:
263
移动设备开发中,由于移动设备(手机等)的内存有限,所以使用有效的缓存技术是必要的.android提供来一个缓存工具类LruCache,开发中我们会经常用到,下面来他是如何实现的.LruCache缓存数据是采用持有数据的强引用来保存一定数量的数据的.每次用到(获取)一个数据时,这个数据就会被移动(一个保存数据的)队列的头部,当往这个缓存里面加入一个新的数据时,如果这个缓存已经满了,就会自动删除这个缓存队列里面最后一个数据,这样一来使得这个删除的数据没有强引用而能够被gc回收....
分类:
移动开发 时间:
2015-07-01 22:13:12
阅读次数:
218
转载慕容小匹夫从游戏脚本语言说起,剖析Mono所搭建的脚本基础深入浅出聊优化:从Draw Calls到GC谁偷了我的热更新?Mono,JIT,IOSJS or C#?不存在的脚本之争Mono为何能跨平台?聊聊CIL(MSIL)Unity3D移动平台动态读取外部文件全解析自己动手,实现一种类似List...
分类:
编程语言 时间:
2015-07-01 22:08:11
阅读次数:
179
引言
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示。同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了?
...
分类:
系统相关 时间:
2015-07-01 10:09:29
阅读次数:
157