一個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對象,一般池對象都在這個區域活躍。 三個區的示意圖如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

最近項目中用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)中也會出現錯誤消息。