加载中…
个人资料
guojian
guojian
  • 博客等级:
  • 博客积分:0
  • 博客访问:14,403
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
访客
加载中…
好友
加载中…
评论
加载中…
分类
博文
标签:

shallow

size

retained

杂谈

关于 shallow size retained size

Shallow size 就是对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。在 32 位系统上,对象头占用 8 字节, int 占用 4 字节,不管成员变量(对象或数组)是否引用了其他对象(实例)或者赋值为 null 它始终占用 4 字节。故此,对于 String 对象实例来说,它有三个 int 成员( 3*4=12 字节)、一个 char[] 成员( 1*4=4 字节)以及一个对象头( 8 字节),总共 3*4 +1*4+8=24 字节。根据这一原则,对 String a=”rosen jiang” 来说,实例 a 的 shallow size 也是 24 字节(很多人对此有争议,请看官甄别并留言给我)。

Retained size 是该对象自己的 shallow size ,加上从该对象能直接或间接访问到对象的 shallow size 之和。换句话说, retained size 是该对象被 GC 之后所能回收到内存的总和。为了更好的理解 retained size ,不妨看个例子。

把内存中的对象看成下图中的节点,并且对象和对象之间互相引用。这里有一个特殊的节点 GC Roots ,正解!这就是 reference chain 的起点。

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

收集器

垃圾收集

新域

并发

设置

杂谈

前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的OOM了!问题虽然蹊 跷,但也趁此机会再次对JVM堆模型、GC垃圾算法等进行了一次系统梳理;

基本概念
堆/Heap
JVM管理的内存叫堆;在32Bit操作系统上有4G的限制,一般来说Windows下为2G,而Linux下为3G;64Bit的就没有这个限制。
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64但小于1G。
JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4但小于1G。
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制,可以由-XX:MinHeapFreeRatio=指定。
默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制,可以由-XX:MaxHeapFreeRatio=指定。
服务器一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小,所以上面的两个参数没啥用。

分代/堆模型
分代是Java垃圾收集的一大亮点,根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,可以扬长避短。可参

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2010-10-17 18:58)
标签:

jvm参数

java虚拟机配置

杂谈

jvm 参数官方地址:http://download.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html
                               http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html


jvm配置实例

/usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K -XX:PermSize=300M -XX:MaxPermSize=300M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=5 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCM

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

性能分析

java虚拟机

jvisualvm分析

前段时间在排查问题过程中我使用了jprofiler远程进行了jvm资源使用情况的监控,从系统的损耗来看,jprofiler对系统资源尤其是内存的消耗是非常庞大的。当时配置的jprofiler内存使用上线是1G,后来发现系统内存在整个测试过程中出现持续上涨的趋势,最后稳定在3G左右(JVM的内存我们配的上限值是2G)。

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

java内存模型

gc

gc原理

it

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

drop

caches

it

Linux 手工释放内存

  二、手动释放缓存

  /proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:

 

[root@server test]# cat /proc/sys/vm/drop_caches
0

 

  首先,/proc/sys/vm/drop_caches的值,默认为0。

 

[root@server test]# sync

&nbs

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2010-08-07 20:50)
标签:

linux

samba

共享文件夹

it

搭建Samba服务器

  

  1.检测安装Samba服务

  (1).检查Samba服务包是否已安装:

  rpm -qa | grep samba

  (2).如未安装,则插入第一张安装盘,执行:

  mount /mnt/cdrom

  cd /cdrom/Redhat/RPMS
  
  (3).进入目录后安装Samba文件:

  注意:运Samba至少需要三个文件,分别为:

  samba-common-2.2.7a-7.9.0.i386.rpm    //服务器和客户端均需要的文件

  samba-2.2.7a-7.9.0.i386.rpm                  //服务器端文件

  samba-client-2.27a-7.9.0.i386.rpm          //客户端文件

  安装上述3个文件.      

  rpm -ivh samba-common-2.2.7a-7.9.0.i386.rpm      //另外两个省略不写

  (4).安装完成后弹出

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

cassandra

cluster

it

Apache Cassandra

http://incubator.apache.org/cassandra/media/img/cassandra_logo.png

A highly scalable, eventually consistent, distributed, structured key-value store.

一个高度可扩展、最終一致、分布式和结构化key-value 儲存方案。

 

下载

http://incubator.apache.org/cassandra/download/ 选择二进制包下载,包名类似 apache-cassandra-incubating-x.y.z-bin.tar.gz 。

 

设置和运行

为了方便,下面所有命令以 root身份执行。

 

以一个独立节点运行

 

 tar -zxvf cassandra-$VERSION.tar.gz mv cassandra-$VERSION /opt/cassandra  sudo mkdir -p /var/log/cassandra sudo mkdir -p /var/lib/cassandra  echo 'alias PATH=$PATH:/opt/cassandra/bin/' >> ~/.bashrc &&
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

音乐

shell

if

sed

表达式

it


【转载】Linux Shell脚本编写基础
1. Linux 脚本编写基础
1.1 语法基本介绍
1.1.1 开头
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
   符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
  当编辑好脚本时,如果要执行该 脚本,还必须使其可执行。
  要使脚本可执行:
编译 chmod +x filename 这样才能用./filename 来运行
1.1.2 注释
  在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。
  如果您使用了注 释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
1.1.3 变量
  在其他编程语言中您 必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
#!/bin/sh
# 对变量赋值:
a='hello w
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

安装APR
cd srclib/apr

#./configure --prefix=/usr/local/apr
#make
#make install

安装APR-util
cd srclib/apr-util

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#make
#make install

# ./configure --prefix=/usr/local/apache
--enable-so
--disable-cgi
--with-apr=/usr/local/apr
--with-apr-util=/usr/local/apr-util/bin

# make
#make install
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有