posts - 4,  comments - 0,  trackbacks - 0
  2011年5月17日
Heap堆内存理解

一个JVM实例只有一个堆内存,堆内存的大小是可以调节的。类加载器读取类文件后,需要把类文件、方法、常量放入到堆内存中,以便执行器执行,堆内存分为三部分:

1. Permanent Space 永久存储区

永久存储区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用的内存。
2.Young Generation Space 新生区
新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。
新生区又分为两部分:伊甸区(Eden space)和幸存者区(Survivor pace)。
所有的类都是在伊甸区被new出来的。幸存区有两个: 0区(Survivor 0 space)和1区(Survivor 1 space)。当伊甸园的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后将伊甸园中的剩余对象移动到幸存0区。若幸存0区也满了,再对该区进行垃圾回收,然后移动到1区。那如果1区也满了呢?再移动到养老区。

3. Tenure Generation Space 养老区
养老区用于保存从新生区筛选出来的JAVA对象,一般池对象都在这个区域活跃。 三个区的示意图如下:


posted @ 2011-05-21 09:42 贺斌 阅读(580) | 评论 (0)编辑 收藏
本篇学习栈内存基本知识,附上JAVA代码
 1package com.howard.jvm;
 2/**
 3 * JAVA的内存管理 (一) 栈内存
 4 * Stack栈 栈内存  JAVA程序的运行区。 是在线程创建时创建,它的生命周期是跟随线程的生命周期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题
 5 * 只要线程一结束,该栈就Over。
 6 * 栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法(Method)和运行期数据的数据集,当一个方法
 7 * A被调用时就产生了一个栈帧F1,并压入到栈中,A方法又调用B方法,于是产生栈帧F2也被压入栈,执行完毕后,先弹出F2栈帧,然后再弹出F1栈帧,遵循“
 8 * 后进先出”的原则。
 9 * 栈帧中主要保存3类数据:
10 * 1. 本地变量(local Variables),包括输入参数和输出参数以及方法内变量;
11 * 2. 栈操作(Operand Stack),记录入栈和出栈操作;
12 * 3. 栈帧数据(Frame Data),包括类文件、方法等等。
13 *
14 * @author Administrator
15 *
16 */

17public class StackMemory {
18
19    public void methodA() {
20        System.out.println("产生一个栈帧F1");
21        int i = 1;
22        System.out.println("变量i 放入到栈帧F1中");
23        System.out.println("准备产生一个栈帧F2");
24        methodB("hello world");
25    }

26
27    public String methodB(String arg) {
28        System.out.println("产生一个栈帧F2");
29        System.out.println("参数arg 和 方法返回值 放入到栈帧F2中");
30        return arg;
31    }

32
33    public static void main(String[] args) {
34        StackMemory sm = new StackMemory();
35        System.out.println("准备产生一个栈帧F1,因为将要调用methodA方法");
36        sm.methodA();
37    }

38
39}

40



posted @ 2011-05-20 22:14 贺斌 阅读(953) | 评论 (0)编辑 收藏
     摘要: mysql jdbc  阅读全文
posted @ 2011-05-17 13:19 贺斌 阅读(2425) | 评论 (0)编辑 收藏
口水:第一次写博客,欢迎大家来拍砖。
最近项目中用mysql主从复制主要是为了实现读写分离、数据库备份、故障转移的需要,采用的是一主一从,配置比较简单。
自已在本机做测试
测试环境如下:
OS:win7
mysql: 安装两个版本的mysql ,一个是5.5.x(高版本做主) 一个是5.1.x.(从)

配置文件 win下my.ini  linux下:my.conf

1. 配置主库

#配置主从数据库
server-id=1
#主从复制是通过二进制文件来进行,所以要开启日志功能
log-bin=mysql-bin
#主机,读写都可以
read-only=0
#需要备份数据,多个写多行
binlog-do-db=core
#不需要备份的数据库,多个写多行
binlog-ignore-db=test
binlog-ignore-db=mysql

2. 配置从库

#主从配置
server-id=2
log-bin=mysql-bin
#主机地址
master-host=127.0.0.1
master-user=slave1
master-password=slave1
master-port=3309
#如果从服务器发现主服务器断掉,重新连接的时间差(秒)
master-connect-retry=60
#只复制某个库
replicate-do-db=core
#不复制某个库
replicate-ignore-db=mysql

3. 设置权限
给主数据库授予一个可以进行复制的用户
GRANT replication slave ON *.* TO 'slave1'@'%' IDENTIFIED BY 'slave1';

4. 启动从库复制
mysql>slave start;
myslq>slave stop;

5. 查看复制状态
主库:mysql>show master status\G(注意,不用加分号)
从库:mysql>show slave status\G

从库设置主库信息
change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3307,
> master_log_file='mysql-bin.000020',
> master_log_pos=135617781;

6. 解决未同步的可能出现的问题

set GLOBAL SQL_SLAVE_SKIP_COUNTER=1

出现过的问题:
a. character 的问题 是mysql client的问题,需要把客户端的character设置和server 一样

7. 如果出现复制错误,从服务器的错误日志(HOSTNAME.err)中也会出现错误消息。

以上配置测试通过,有问题欢迎一起来讨论
posted @ 2011-05-17 11:02 贺斌 阅读(1603) | 评论 (0)编辑 收藏
<2011年5月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜