|
Core Java Technologies Tech Tips¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Java 2 Platform,
Standard Edition (J2SE)¿¡ ±â¹ÝÇÑ core Java technologies ¿Í APIsÀÇ
»ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼´Â Java 2 SDK, Standard Edition,
v 1.4¸¦ »ç¿ëÇÕ´Ï´Ù.
À̹ø È£¿¡¼´Â,
»ç¿ëÀÚ µ¥ÀÌÅͱ׷¥ ÇÁ·ÎÅäÄÝÀÇ ÇÁ·Î±×·¡¹Ö
°¡ºñÁö ÄÝ·º¼Ç
À» ´Ù·ç°Ô µË´Ï´Ù.
ÀúÀÚ John Zukowski
»ç¿ëÀÚ µ¥ÀÌÅͱ׷¥ ÇÁ·ÎÅäÄÝÀÇ ÇÁ·Î±×·¡¹Ö
Ç¥ÁØ J2SE ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀº, ÈçÈ÷ Transmission Control Protocol/Internet Protocol (TCP/IP)¸¦ »ç¿ëÇÑ ¼ÒÄÏ ±â¹ÝÀÇ ¸ðµ¨À» À§ÇÑ ÄÚµåÀÎ °æ¿ì°¡ ¸¹´Ù. TCP/IP´Â Simple Mail Transfer Protocol (SMTP)À» ÅëÇÑ À̸ÞÀÏ ¹ß¼ÛÀ̳ª Hypertext Transfer Protocol (HTTP)¸¦ ÀÌ¿ëÇÑ World Wide Web ¼ÇÎ, Network News Transfer Protocol (NNTP)À» ÅëÇÑ ´º½º±×·ì °Ë»ö µî°ú °°Àº ÀÎÅÍ³Ý Ä¿¹Â´ÏÄÉÀÌ¼Ç ¾÷¹«¿¡ »ç¿ëµÈ´Ù. ÀÌ¿Í °°ÀÌ TCP/IP´Â Ä¿¹Â´ÏÄÉÀ̼ÇÀÇ Àü´ÞÀ» º¸ÀåÇÑ´Ù.
°£·«ÇÏ°Ô ¸»ÇÏÀÚ¸é, TCP/IPÀÇ IP´Â µ¥ÀÌÅÍ ÆÐŶÀ» ³ëµå¿¡¼ ³ëµå·Î À̵¿½ÃŲ´Ù. ÀÌ¿¡ ¹ÝÇØ TCP´Â Á¤º¸¿Í ³»¿ëÀ» ¼ø¼ÈÇÏ°í ¼Ò½º¿Í ¸ñÀûÁöÀÇ ÁÖ¼Ò¸¦ ·¦ÇÎ(wrapping)ÇÑ´Ù. ÆÐŶ ¼¼Æ®°¡ ¼Ò½º ÁּҷκÎÅÍ ¸ñÀûÁö¿¡ µµÂøÇϸé, ¸ñÀûÁöÀÇ È£½ºÆ®´Â ¹Þ´Â »ç¶÷ÀÌ º¸³»Áø µ¥ÀÌÅ͸¦ ¿ø·¡ ¼ø¼´ë·Î ÀÐÀ» ¼ö ÀÖµµ·Ï ÆÐŶÀ» º»·¡ÀÇ ¼ø¼¿¡ ¸ÂÃß¾î Àç¼ø¼ÈÇÑ´Ù.
¸¸¾à SocketÀ̳ª URL°ú °°Àº Ŭ·¡½º¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é, TCP/IP´Â Ä¿¹Â´ÏÄÉÀ̼ǿ¡ °üÇÑ ÀÚ¼¼ÇÑ »çÇ×µéÀ» ó¸®ÇÏ°Ô µÈ´Ù. ¿¹¸¦ µéÀÚ¸é, TCP/IP´Â Çì´õ¿¡ Á¸ÀçÇÏ´Â ¿ÀÇÁ¼Â(offset) Áß ¾î¶² ¿ÀÇÁ¼ÂÀÌ TCP ÆÐŶÀ» À§ÇÑ ¼ýÀÚÀÇ ¼ø¼È¿Í È®ÀÎÀ» ÀúÀåÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù. ¶ÇÇÑ TCPÆÐŶÀÇ Ä¸½¶È´Â IP µ¥ÀÌÅͱ׷¥ ÆÐŶÀ̶ó°í ºÒ¸®´Âµ¥, TCP/IP ±â¹ÝÀÇ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ °æ¿ì¿¡ µ¥ÀÌÅͱ׷¥ÀÇ ÆÐŰ¡µµ ÀϾÙ.
±×·¯³ª TCP/IP°¡ »ç¿ëÀÚ°¡ ¿øÇÏ´Â °Í ÀÌ»óÀÇ °ÍÀ» Á¦°øÇØÁÖ´Â °æ¿ìµµ ÀÖ´Ù. °¡·É, Ä¿¹Â´ÏÄÉÀ̼ÇÀÇ Àü´ÞÀ» º¸ÀåÇÒ Çʿ䰡 ¾ø´Ù°Å³ª, ÆÐŶÀÇ Àç¼Û½Å¿¡ µû¸¥ ½Ã°£Áö¿¬À» ¿øÄ¡ ¾ÊÀ» ¶§, ¶Ç´Â µ¥ÀÌÅ͸¦ Àü¼ÛµÈ ¼ø¼´ë·Î ÀÐÀ» Çʿ䰡 ¾ø´Â °æ¿ì¶ó¸é? ÀÌ·± °æ¿ì¿¡´Â, TCP/IPÀÇ ¶Ç ´Ù¸¥ ÇüÅÂÀÎ User Datagram Protocol (UDP)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. UDP¸¦ ÀÌ¿ëÇØ¼ ÀÛ¾÷À» ÇÏ¸é »ç¿ëÀÚ´Â ¿©ÀüÈ÷ IP ÇÁ·ÎÅäÄÝÀ» ÅëÇØ¼ ÆÐŶÀ» Àü¼ÛÇÏÁö¸¸, Àü¼Û ¿©ºÎ³ª ¼ø¼¿¡ ´ëÇØ¼´Â º¸ÁõÇÏÁö´Â ¾Ê´Â´Ù. À̶§ Àü¼Û¿©ºÎ¿¡ ´ëÇØ¼ º¸ÁõÇÏÁö ¾Ê´Â ÀÌÀ¯´Â ¹«¾ùÀϱî? »ç¹«½Ç ¾È¿¡ ÀÖ´Â ¸ðµç ±â°èµéÀ» ¹Ýµå½Ã ½ÇÇàÇϰԲû ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í »ó»óÇØº¸ÀÚ. ¸Å Ãʸ¶´Ù °¢°¢ÀÇ ±â°èµéÀº 'ÀÛµ¿ Áß' À̶ó´Â ¸Þ½ÃÁö¸¦ Áß¾Ó ¼¹ö¿¡ º¸³¾ °ÍÀÌ´Ù. ¸¸¾à 'ÀÛµ¿ Áß' À̶ó´Â ¸Þ½ÃÁö°¡ µµÁß¿¡ »ç¶óÁø´Ù¸é ¹®Á¦°¡ »ý±æ±î? ´ë´äÀº ÀϹÝÀûÀ¸·Î '±×·¸Áö ¾Ê´Ù'¶ó´Â °ÍÀÌ´Ù. ¸Þ½ÃÁöÀÇ ¹ß½ÅÀÚ°¡ ±× ¸Þ½ÃÁö¸¦ ÀçÀü¼ÛÇÒ ¼öµµ ÀÖ°ÚÁö¸¸, °ð ¼öÃÊ ³»¿¡ ¶È°°Àº ¸Þ½ÃÁö¸¦ Àü¼ÛÇÒ ¿¹Á¤À̱⠶§¹®¿¡ ÀüÇô ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. ºñ½ÁÇÑ ¿¹·Î, ¸¸¾à ¸Þ½ÃÁö°¡ Á¤È®ÇÑ ¼ø¼´ë·Î µµÂøÇÏÁö ¾Ê´Â´Ù¸é ¹®Á¦°¡ µÉ±î? ´Ù½Ã ¸»ÇÏÁö¸¸ ÀÌ·± Á¾·ùÀÇ ¸Þ½ÃÁö´Â ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. 10½Ã 5ºÐ¿¡ º¸³½ ¸Þ½ÃÁö°¡ 10½Ã 10ºÐ¿¡ µµÂøÇÑ´Ù°í ÇØµµ Å©°Ô ½Å°æ ¾²Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. ¹°·Ð ÇÏÀÌ ¿£µå ÁÖ½Ä °Å·¡ ½Ã½ºÅÛÀÇ °æ¿ì¶ó¸é °¡°Ý¿¡ ´ëÇÑ Á¤º¸¸¦ ³õÄ¡±â¸¦ ¿øÄ¡ ¾Ê°ÚÁö¸¸, Á¶±Ý ´ú Áß¿äÇÑ Áõ±Ç ½Ã¼¼ Ç¥½Ã±â¿¡¼¶ó¸é °¡°Ý º¯È¸¦ ³õÄ£´Ù ÇØµµ Å©°Ô ¹®Á¦ »ïÁö ¾ÊÀ» °ÍÀÌ´Ù. Áֽİŷ¡¸¦ ÇÒ ½ÃÁ¡¿¡ ¾îÂî µÇ¾úµç ´Ù½Ã ÇÑ ¹ø °¡°ÝÀ» üũ ÇØ¾ß ÇÒ °ÍÀÌ´Ù. »ç½Ç»ó, ¼Õ½ÇµÈ ÆÐŶÀÌ ½Ç½Ã°£ µ¥ÀÌÅÍÀÇ ÀçÀü¼ÛÀ» À§ÇÑ °ÍÀ̶ó¸é TCP¸¦ »ç¿ëÇÏ´Â ÀÏÀº À§ÇèÇÒ ¼öµµ ÀÖ´Ù. TCPÀÇ »ç¿ëÀº, µ¥ÀÌÅ͸¦ ¼ø¼´ë·Î Á¤È®ÇÏ°Ô Àü¼ÛÇØ¾ß ÇÒ ¶§º¸´Ù ½Ç½Ã°£À¸·Î Àü¼ÛÇØ¾ß ÇÒ °æ¿ì¿¡ Á» ´õ À¯ÀÇÇØ¾ß ÇÑ´Ù.
UDP ÇÁ·Î±×·¡¹ÖÀº java.net ÆÐŰÁöÀÇ DatagramPacket ¿Í DatagramSocket Ŭ·¡½º¸¦ Æ÷ÇÔÇÑ´Ù. DatagramPacket Ŭ·¡½º´Â µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ Àå¼Ò¿¡ ´ëÇÑ È®ÀÎ µî°ú °°Àº, Àü¼ÛÀ» À§ÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. DatagramSocket Ŭ·¡½º´Â ÆÐŶÀ» º¸³»°í ¹Þ´Â µ¥¿¡ »ç¿ëµÈ´Ù.
DatagramPacket Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ 6°³ÀÇ »ý¼ºÀÚ¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.
DatagramPacket(byte[] buf, int length, InetAddress
address, int port)
DatagramPacket(byte[] buf, int offset, int length,
InetAddress address, int port)
DatagramPacket(byte[] buf, int offset, int length,
SocketAddress address)
DatagramPacket(byte[] buf, int length,
SocketAddress address)
DatagramPacket(byte[] buf, int length)
DatagramPacket(byte[] buf, int offset, int
length)
»ý¼ºÀÚµéÀÇ ¸ñ·ÏÀº ¼¼ ½ÖÀ¸·Î ÀÌ·ç¾îÁ® ÀÖÀ½À» ÁÖÀÇÇÏÀÚ. ù µÎ ½ÖÀÇ »ý¼ºÀÚ´Â ¼Û½ÅÀ» À§ÇÑ ÆÐŶÀ» »ý¼ºÇϴµ¥ »ç¿ëµÈ´Ù. ù ÇÑ ½ÖÀÇ »ý¼ºÀÚµéÀº ¸ñÀûÁö ÁÖ¼Ò¸¦ À§ÇÑ InetAddress Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. µÎ ¹øÂ° ½ÖÀÇ »ý¼ºÀÚµéÀº SocketAddress Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. ¸¶Áö¸· ÇÑ ½ÖÀÇ »ý¼ºÀÚµéÀº ÆÐŶÀ» ¹Þ´Â µ¥¿¡ »ç¿ëµÈ´Ù. ÀÌ »ý¼ºÀÚµéÀº Ãâ¹ßÁö³ª ¸ñÀûÁö ¾î´À °÷ÀÇ ÁÖ¼Òµµ ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù.
ÆÐŶÀ» »ý¼ºÇÑ ´ÙÀ½¿¡´Â, ¼Û½ÅÀ̳ª ¼ö½Å ÇÁ·Î¼¼½º´Â DatagramSocket Ŭ·¡½ºÀÇ send ¸Þ¼Òµå³ª receive ¸Þ¼Òµå¸¦ È£ÃâÇØ¼ ÀÌ·ç¾îÁø´Ù. Á¶±Ý ´õ ÀÚ¼¼È÷ ¼³¸íÇÏÀÚ¸é, ¿ì¼± ÆÐŶÀ» »ý¼ºÇÏ°í ±× ´ÙÀ½ ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù. ±× ÈÄ¿¡ µ¥ÀÌÅͱ׷¥ ÆÐŶÀ» ¼Û½ÅÇϱâ À§ÇØ DatagramSocket Ŭ·¡½ºÀÇ send ¸Þ¼Òµå¸¦ È£ÃâÇϰųª, ¶Ç´Â ÆÐŶÀ» ¼ö½ÅÇϱâ À§ÇØ DatagramSocket Ŭ·¡½ºÀÇ receive ¸Þ¼Òµå¸¦ È£ÃâÇÏ°Ô µÈ´Ù. °¢°¢ ´Ù¸¥ ¼ö½ÅÁö·Î °¡°í, ´Ù¸¥ ¼Ò½º·ÎºÎÅÍ ¿À´Â ´ÙÁß ÆÐŶÀÇ ¼Û¼ö½ÅÀ» Çϱâ À§Çؼµµ ÀÌ DatagramSocket Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
µ¥ÀÌÅͱ׷¥ ÆÐŶÀ» ¼Û¼ö½Å ÇÏ´Â ¿¹Á¦¸¦ »ìÆìº¸ÀÚ. import java.io.*;
import java.net.*;
public class GetTime {
final private static int DAYTIME_PORT = 13;
public static void main(String args[]) throws
IOException {
if (args.length == 0) {
System.err.println
("Please specify daytime host");
System.exit(-1);
}
String host = args[0];
byte message[] = new byte[256];
InetAddress address = InetAddress.getByName(host);
System.out.println("Checking at: " + address);
DatagramPacket packet =
new DatagramPacket(message, message.length,
address, DAYTIME_PORT);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
packet =
new DatagramPacket(message, message.length);
socket.receive(packet);
String time = new String(packet.getData());
System.out.println(The time at "
+ host + " is: " + time);
socket.close();
}
}
µ¥ÀÌŸÀÓ ¼ºñ½º¸¦ ½ÇÇàÇÏ´Â ¼¹öÀÇ À̸§À» ÇÁ·Î±×·¥¿¡ ÀÔ·ÂÇϸé, ±× ±â°è°¡ À§Ä¡ÇÑ Àå¼ÒÀÇ ½Ã°£À» ¾Ë ¼ö°¡ ÀÖ´Ù. ¿¹¸¦ µéÀÚ¸é:
java GetTime localhost
Checking at: localhost/127.0.0.1
The time at localhost is: Fri Apr 2 11:30:46 2004
À§ÀÇ ¿¹°¡ °¡Áö°í ÀÖ´Â ÇѰ¡Áö ÀáÀçÀûÀÎ ¹®Á¦´Â º¸¾È ¹®Á¦ÀÌ´Ù. º¸¾È»óÀÇ ÀÌÀ¯·Î ÀÎÇØ¼, À¥À» ÅëÇØ Á¢±Ù °¡´ÉÇÑ ´ëºÎºÐÀÇ ±â°èµéÀº ²À ÇÊ¿äÇÏÁö ¾ÊÀº ¼ºñ½ºµéÀº ²ô°í, ¹æÈº®À» ÅëÇØ UDP Á¢¼ÓÀ» ºÒ°¡´ÉÇÏ°Ô ÇØ³õ¾Ò´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î ÀÎÇØ, µ¥ÀÌ Å¸ÀÓ ¼ºñ½º¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Â Á¢±Ù °¡´ÉÇÑ ÀåÄ¡¸¦ ãÀ» ¼ö ¾øÀ»Áöµµ ¸ð¸¥´Ù. ¹Ý¸é ¸®´ª½º »ç¿ëÀÚµéÀº ÀÌ·¯ÇÑ ¼ºñ½º¸¦ ½ÃÀÛÇÏ°í ±×µé °íÀ¯ÀÇ ÀåÄ¡¿¡ Á¢¼ÓÇÒ ¼ö°¡ ÀÖ´Ù. ½ÃÀÛ °¡´ÉÇÑ ¼ºñ½º°¡ ¾ø´Â ÀåÄ¡µéÀ» À§ÇÑ ¶Ç ´Ù¸¥ ¿É¼ÇÀº ¾Æ·¡¿Í °°ÀÌ TimeServerÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. TimeServerÀº ¼¹ö »çÀ̵带 »ý¼ºÇϱâ À§ÇØ µ¿ÀÏÇÑ DatagramPacket ¿Í DatagramSocket Ŭ·¡½ºµéÀ» »ç¿ëÇÑ´Ù.
TimeServer ÇÁ·Î±×·¥¿¡¼ DatagramSocket(DAYTIME_PORT)ÀÇ DAYTIME_PORT¿¡¼ Æ÷Æ®¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ÀÌ Á¤ÀÇµÈ Æ÷Æ®¿¡¼ ÀÛ¾÷Çϱ⸦ ¿øÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÇÏÁö¸¸ ÇÁ·Î±×·¥Àº »ç¿ëÀÚ°¡ receive ¸Þ¼Òµå¸¦ È£ÃâÇϱâ Àü±îÁö ±â´Ù·ÁÁÖÁö ¾Ê´Â´Ù. ÈçÈ÷ ÀÖ´Â ÀÏÀÌÁö¸¸, ¿äûÀ» º¸³»·Á¸é µ¥ÀÌÅ͸¦ À§ÇÑ ÆÐŶÀ» »ý¼ºÇؾ߸¸ ÇÑ´Ù. µ¥ÀÌ Å¸ÀÓ ¼ºñ½º´Â ÆÐŶÀÇ ³»¿ëÀº ¹«½ÃÇÏÁö¸¸, »ç¿ëÀÚ´Â ¿©ÀüÈ÷ ¿äûÀ» ¹Þ±â À§ÇÑ ÆÐŶÀ» »ý¼ºÇؾ߸¸ ÇÑ´Ù. DatagramPacket Ŭ·¡½º¿¡¼ ÀÀ´äÀ» µ¹·Áº¸³»±â À§Çؼ´Â ÀÀ´äÀ» ¾îµð·Î º¸³»¾ß ÇÏ´ÂÁö¸¦ ¼ö½ÅÇÑ ÆÐŶ¿¡ ¿äÃ»ÇØ¾ß ÇÑ´Ù.
¿©±â TimeServer ÇÁ·Î±×·¥À» »ìÆìº¸ÀÚ. import java.io.*;
import java.net.*;
import java.util.*;
public class TimeServer {
final private static int DAYTIME_PORT = 13;
public static void main(String args[]) throws
IOException {
DatagramSocket socket =
new DatagramSocket(DAYTIME_PORT);
while (true) {
byte buffer[] = new byte[256];
DatagramPacket packet =
new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String date = new Date().toString();
buffer = date.getBytes();
// Get response address/port
// for client from packet
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(buffer, buffer.length,
address, port);
socket.send(packet);
}
}
}
13°ú °°ÀÌ ·Î¿ì Æ÷Æ®¿¡ ¼ºñ½º »ý¼ºÀ» Çã°¡ÇÏÁö ¾Ê´Â ÀåÄ¡¶ó¸é, Ŭ¶óÀÌ¾ðÆ® GetTime Ŭ·¡½º¿Í TimeServer Ŭ·¡½º ¸ðµÎ¿¡¼ Æ÷Æ®¸¦ º¯°æÇØÁÖ¾î¾ß ÇÑ´Ù. ÄÄÆÄÀÏÇÑ ÈÄ¿¡ TimeServer Ŭ·¡½º¸¦ ¸ÕÀú ½ÇÇàÇØº¸ÀÚ. GetTime Ŭ·¡½º¸¦ ½ÇÇàÇÏ¸é º¸³»Áö´Â °Í°ú °°Àº ½Ã°£ ¿äû¿¡ °è¼ÓÇØ¼ ÀÀ´äÇÏ¸é¼ ¿µ±¸È÷ ½ÇÇàµÉ °ÍÀÌ´Ù.
µ¥ÀÌ Å¸ÀÓ ¼ºñ½º¿¡ ´ëÇØ ´õ ¾Ë°í ½Í´Ù¸é RFC
867À» Âü°íÇϱ⠹ٶõ´Ù. µ¥ÀÌÅͱ׷¥¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÚ¹Ù Æ©Å丮¾óÀÇ networking
trailÀ» Âü°íÇϱ⠹ٶõ´Ù.
°¡ºñÁö ÄÝ·º¼Ç
2004³â 1¿ùÀÇ Å×Å©ÆÁÀ̾ú´ø Monitoring
Class Loading and Garbage Collection¿¡¼´Â ÀÚ¹Ù Ä¿¸Çµå ¶óÀÎ Åø (ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç ·±ÃÄ)¸¦ ÀÌ¿ëÇÏ¿© Ä¿¸Çµå ¶óÀÎ ¿É¼ÇÀÎ -verbose:gc¿¡ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù. Ç¥ÁØÀÌ ¾Æ´Ï¶ó´Â ÀÌÀ¯·Î -XX ¿É¼Ç¿¡ ´ëÇØ ½Å°æ ¾²Áö ¾Ê´Â´Ù°Å³ª, ¿É¼ÇÀÇ ±ÕÁú¼ºÀ» Áß¿ä½ÃÇѴٰųª, ¶Ç´Â ÇöÀç »ç¿ëÇϰí ÀÖ´Â ¿É¼Ç¿¡ ´ëÇØ¼ ¾Ë°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ -verbose:gc ¸¦ ÀÔ·ÂÇØº¸ÀÚ. -XX:+PrintGC -XX:+TraceClassUnloading
À̰ÍÀº -verbose:gc ¿É¼ÇÀÌ ¾î¶»°Ô ¹ø¿ªµÇ´ÂÁö¸¦ º¸¿©ÁØ´Ù.
ÀÌ ¿É¼ÇÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÇÇàµÇ´Â µ¿¾È °¡ºñÁö ÄÝ·º¼Ç À̺¥Æ®ÀÇ ¸®Æ÷Æ®¸¦ ¿ä±¸ÇÑ´Ù. J2SE v1.4.2¿¡¼´Â °¡ºñÁö ÄÝ·ºÅ͸¦ ÄÁÆ®·ÑÇÏ´Â ´Ù¸¥ ¸¹Àº Ä¿¸Çµå ¶óÀÎÀÌ ÀÖ´Ù. ÄÚµåÀÇ ¾î´À ¶óÀεµ º¯°æÇÏÁö ¾Ê°í ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼º´ÉÀ» ÃÖ´ëÇÑÀ¸·Î Ȱ¿ëÇÏ·Á¸é, ÀÌ ¿É¼ÇµéÀ» ÃÖ¼ÒÇÑ Çϳª ÀÌ»ó »ç¿ëÇÒ ¼ö°¡ ÀÖ´Ù. À̹ø ÆÁ¿¡¼´Â °¡ºñÁö ÄÝ·ºÅ͸¦ ÄÁÆ®·ÑÇÏ´Â ºÎ¼öÀûÀÎ ¸¹Àº ÀÚ¹Ù Ä¿¸Çµå ¶óÀÎÀ» ´Ù·ê °ÍÀÌÁö¸¸, °¡ºñÁö ÄÝ·º¼Ç Æ©´× ¿É¼ÇÀÇ Àüü¸¦ ¸»ÇÏÁö´Â ¾Ê´Â´Ù.
ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç ·±ÃĴ ǥÁØ Ä¿¸Çµå-¶óÀÎ ½ºÀ§Ä¡¿Í ºñÇ¥ÁØ Ä¿¸Çµå-¶óÀÎ ½ºÀ§Ä¡¸¦ ¸ðµÎ µ¿¹ÝÇÑ´Ù. -verbose:gc ¿É¼Ç¿¡ °üÇÑ Á¤º¸¿¡ ´ëÇØ ¾Ë¾Æº¸·Á¸é, ƯÁ¤ Ç÷§Æûº°·Î ´ÙÀ½ À¥ÆäÀÌÁö¸¦ Âü°íÇÏÀÚ.
À§ÀÇ Âü°í ÆäÀÌÁö¿¡´Â ¸î¸î ºñÇ¥ÁØ ¿É¼Çµé¿¡ ´ëÇØ¼µµ ³ª¿ÍÀÖ´Ù. ÀÚ¹Ù Ä¿¸Çµå ¶óÀÎ Åø¿¡¼ Ç¥ÁØ ¿É¼ÇÀÎ -XÀ» ½ÇÇàÇÏ¸é »ç¿ëÀÚÀÇ Ç÷§ÆûÀ» À§ÇÑ ºñÇ¥ÁØ ¿É¼ÇÀ» º¸¿©ÁØ´Ù.
¼Ö¶ó¸®½º Ç÷§ÆûÀ̶ó¸é, java
-X À» ½ÇÇàÇßÀ» °æ¿ì Ãâ·ÂµÇ´Â ³»¿ëÀº ´ÙÀ½°ú °°´Ù. -Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by :>
set search path for bootstrap classes and
resources
-Xbootclasspath/a:<directories and zip/jar files separated by :>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by :>
prepend in front of bootstrap class path
-Xnoclassgc disable class garbage collection
-Xincgc enable incremental garbage collection
-Xloggc:<file> log GC status to a file with time stamps
-Xbatch disable background compilation
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
-Xprof output cpu profiling data
-Xrunhprof[:help]|[:<option>=<value>, ...]
perform JVMPI heap, cpu, or monitor profiling
-Xdebug enable remote debugging
-Xfuture enable strictest checks, anticipating future
default
-Xrs reduce use of OS signals by Java/VM (see
documentation)
-Xcheck:jni perform additional checks for JNI functions
The -X options are non-standard and subject to change without
notice.
À§ÀÇ Ãâ·Â°ªÀÇ ¸¶Áö¸· ÁÙÀ» ÁÖ¸ñÇÏÀÚ. ±×·¯ÇÑ ºñÇ¥ÁØ ¿É¼ÇµéÀ» »ç¿ëÇÏ´Â °ÍÀº »ç¿ëÀÚÀÇ Ã¥ÀÓ ÇÏ¿¡ ÀÖÀ½À» ºÐ¸íÈ÷ ³ªÅ¸³»°í ÀÖ´Ù.
°¡ºñÁö ÄÝ·º¼ÇÀ» À§ÇÑ ¼¼ °¡Áö ƯÁ¤ÇÑ ºñÇ¥ÁØ ¿É¼ÇÀº -Xnoclassgc, -Xincgc,
±×¸®°í -Xloggc:<file>ÀÌ´Ù. -Xnoclassgc ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù¸é, ÄÝ·º¼ÇÀÌ ¹ß»ýÇÏÁö¸¸ Ŭ·¡½ºµéÀº permanent generationÀ¸·ÎºÎÅÍ ¼öÁýµÇÁö ¾Ê´Â´Ù. ÀÌ´Â ÄÝ·º¼ÇÀÌ ¼ö°ÅÇÏ´Â ¸Þ¸ð¸®°¡ ¾øÀ½À» ÀǹÌÇÑ´Ù. ¸¸¾à Ŭ·¡½º¸¦ ·ÎµùÇÏ·Á°í ÇÒ ¶§ ÀÌ¹Ì ·ÎµùµÈ Ŭ·¡½ºµéÀ» À§ÇØ ¸Þ¸ð¸®¸¦ ½á¹ö·È´Ù¸é ÄÝ·º¼ÇÀº ¹®Á¦¸¦ ÇØ°áÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
½ãÀÇ 1.4.2 ±¸Çö¿¡¼ -XincgcÀº -XX:+UseTrainGC ¿É¼Ç°ú µ¿µîÇÑ °ªÀ» °¡Áø´Ù. Áï, -XincgcÀº old generationÀ» À§Çؼ µðÆúÆ® °ª¿¡¼ ÁÖ¾îÁø "serial" ÄÝ·ºÅ͸¦ »ç¿ëÇϱ⠺¸´Ù´Â "train"ÄÝ·ºÅ͸¦ »ç¿ëÇÑ´Ù. ("generations"ÀÇ °³³äÀº À̹ø ÆÁÀÇ ÈĹݿ¡¼ ´Ù·ç°ÔµÈ´Ù.) train ÄÝ·ºÅÍ´Â ¾à 10%ÀÇ ÆÛÆ÷¸Õ½º ºÎÇϸ¦ ¹ß»ý½ÃŲ´Ù. ¶ÇÇÑ old generation Àüü¸¦ ÇÑ ¹ø¿¡ ¼öÁýÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¾à°£ÀÇ °ø°£ÀûÀÎ ºÎÇÏ(space overhead)µµ ¹ß»ýÇÑ´Ù. train ÄÝ·ºÅÍ´Â Á¡ÁøÀûÀ¸·Î ÀÛµ¿ÇÏ´Â ÀåÁ¡À» °¡Áö±â ¶§¹®¿¡ ÈÞÁö ½Ã°£ÀÌ »ó´çÈ÷ ª´Ù. J2SE 1.5.0 º£Å¸ ¸±¸®Áî¿¡¼´Â -Xincgc Ç÷¡±×´Â train ÄÝ·ºÅͺ¸´Ù´Â CMS(concurrent mark sweep) ÄÝ·ºÅ͸¦ Àκ¸Å·ÇÏ°Ô µÈ´Ù. ±× ÀÌÀ¯´Â, CMS ÄÝ·ºÅͰ¡ train ÄÝ·ºÅͺ¸´Ù ´õ ±ÕÀÏÇϱ⠶§¹®ÀÌ´Ù.
-Xloggc ¿É¼ÇÀ» ÁöÁ¤ÇØÁÜÀ¸·Î½á -verbose:gc Ãâ·Â°ªÀÇ µî°¡¸¦ ÆÄÀÏ·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. -verbose:gc ¿¡ ÀÇÇÑ Ãâ·Â°ª°ú ºñ±³ÇØ º¸¸é, -Xloggc ¿¡ ÀÇÇÑ Ãâ·Â°ªÀº ÇÑ °¡Áö Ãß°¡ÀûÀÎ Ç׸ñÀ» Æ÷ÇÔÇϴµ¥, ±×°ÍÀº ¾ÖÇø®ÄÉÀ̼ǿ¡¼ÀÇ Ã¹ ÄÝ·º¼ÇÀÌ ÀÏ¾î³ ½Ã°£¿¡¼ºÎÅÍ °¡ºñÁö ÄÝ·º¼ÇÀÌ ¹ß»ýÇÑ ½Ã°£¿¡ ´ëÇÑ Á¤º¸ÀÌ´Ù. ´ÙÀ½ÀÇ -Xloggc »ùÇà Ãâ·Â°ª¿¡¼ »ìÆìº¸ÀÚ.
0.000: [GC 512K->153K(1984K), 0.0198483 secs]
0.372: [GC 506K->281K(1984K), 0.0206428 secs]
0.393: [Full GC 281K->281K(1984K), 0.0888926 secs]
0.519: [GC 947K->941K(1984K), 0.0045715 secs]
0.524: [Full GC 941K->941K(1984K), 0.0797666 secs]
0.650: [GC 2107K->1597K(2808K), 0.0013546 secs]
0.838: [GC 2107K->1700K(2808K), 0.0116557 secs
ÆÄÀÏ¿¡ ÀçÀü¼ÛÇÒ ÇÊ¿ä¾øÀÌ -XX:+PrintGCTimeStamps ¿É¼ÇÀ» ÁöÁ¤ÇØÁÜÀ¸·Î½á -Xloggc Ãâ·Â°ª¿¡ ½Ã°£ ¼ÒÀÎÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù.
-Xnoclassgc, -Xincgc °ú -Xloggc:<file> À̿ܿ¡µµ °¡ºñÁö ÄÝ·ºÅ͸¦ ÄÁÆ®·ÑÇÏ´Â ´Ù¸¥ ¿É¼ÇµéÀÌ Á¸ÀçÇÑ´Ù. ¿¹¸¦ µéÀÚ¸é, ÄÝ·ºÅͰ¡ ½ÇÇàÇÒ ¶§ °£Á¢ÀûÀ¸·Î ¿µÇâÀ» ³¢Ä¡µµ·Ï -Xms¿Í -Xmx ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¸Þ¸ð¸® ÇÒ´çÀÇ Ç® »çÀÌÁ º¯°æÇÒ ¼ö ÀÖ´Ù. -XmsÀÇ °ªÀ» Å©°Ô ÁöÁ¤ÇØÁÖ¸é, ±×¸¸Å Å« ÀÚ¹Ù °´Ã¼ ÈüÀ¸·Î ÀÛ¾÷ÇÏ°Ô µÈ´Ù. À̰ÍÀº ÈüÀ» ä¿ì´Â µ¥¿¡ ´õ ¸¹Àº ½Ã°£ÀÌ °É¸°´Ù´Â °ÍÀ» ÀǹÌÇÏ°í °á°úÀûÀ¸·Î ÄÝ·º¼ÇÀ» ÇÇÇÏÁö´Â ¾ÊÁö¸¸ ¹Ì·ç°Ô µÈ´Ù´Â °ÍÀÌ´Ù. Å« -Xms °ªÀº ¶ÇÇÑ ´õ ¸¹Àº ½Ã½ºÅÛ ¸®¼Ò½º¸¦ ¼Ò¸ðÇÏ°Ô µÈ´Ù. ¹Ý¸é -XmxÀÇ °ªÀ» Å©°Ô ÁöÁ¤Çϸé, ÀÚ¹Ù °´Ã¼ ÈüÀÇ »çÀÌÁî°¡ ÇÊ¿ä ½Ã¿¡ Ä¿Áú ¼ö ÀÖ°Ô µÈ´Ù. ÀÌ·¸°Ô °ªÀÌ Å« °´Ã¼ ÈüÀº Á¶±Ý ´ú ºó¹øÇÏ°Ô °¡ºñÁö ÄÝ·ºÆ®µÈ´Ù´Â Á¡ ¿Ü¿¡´Â ¸ðµç Á¡ÀÌ µ¿ÀÏÇÏ´Ù. µû¶ó¼ ÀÌ ¿É¼ÇÀ» ÅëÇØ °¡ºñÁö ÄÝ·º¼ÇÀÌ ºó¹øÇÏÁö¸¸ ªÀº ½Ã°£µ¿¾È ÀϾ´Â °Í°ú, Ƚ¼ö´Â ÀûÁö¸¸ ¿À·£ ½Ã°£µ¿¾È °¡ºñÁö ÄÝ·º¼ÇÀÌ ÀϾ´Â °Í Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ °¢°¢ÀÇ ÄÝ·º¼ÇÀÌ ºÎÇϸ¦ ¹ß»ýÇϱ⠶§¹®¿¡, »ç¿ëÀÚ°¡ Á¤ÀÇÇÏ´Â ¿ä±¸Á¶°Ç¿¡ µû¶ó ´õ ³ªÀº Á¢±Ù¹ýÀº ´Þ¶óÁö°Ô µÇ¾îÀÖ´Ù.
-Xms ¿Í -Xmx ¿Ü¿¡µµ °¡ºñÁö ÄÝ·º¼Ç¿¡ ¿µÇâÀ» ÁÖ´Â ºñÇ¥ÁØ ¿É¼ÇµéÀÌ Á¸ÀçÇÑ´Ù. ±× ¿É¼ÇµéÀº java -X µµ¿ò¸»¿¡¼ º¼ ¼ö ¾ø´Âµ¥, ±× ÀÌÀ¯´Â ÀÌ ¿É¼ÇµéÀº ºñÇ¥ÁØ ¿É¼ÇÀ̱⠶§¹®¿¡ µÎ°³ÀÇ X¸¦ »ç¿ëÇØ¾ßÇϱ⠶§¹®ÀÌ´Ù.
¸¸¾à ÈüÀÇ ÃÖ¼Ò°ª°ú ÃÖ´ë°ªÀ» ÁöÁ¤ÇØÁÖ°íÀÚ ÇÑ´Ù¸é (ÀÌ ¶§, µðÆúÆ® °ªÀÇ ¹üÀ§´Â 40%~70%),
-XX:MinHeapFreeRatio=<Minimum> ¿É¼Ç°ú -XX:MaxHeapFreeRatio=<Maximum> ¿É¼ÇÀ» »ç¿ëÇÏ¸é µÈ´Ù. ±×·¯³ª ÃÖ¼Ò°ªÀ» ³Ê¹« ÀÛ°Ô ¼³Á¤ÇسõÀ¸¸é, ÈüÀº ÄÝ·º¼Ç ÈÄ¿¡ ÃæºÐÇÑ ¿©À¯°ø°£À» È®º¸ÇÏÁö ¸øÇÏ°Ô µÇ¹Ç·Î, ´Ü±â°£ ³»¿¡ ¶Ç´Ù½Ã ÄÝ·ºÆÃÀ» ÇØ¾ßÇÒ ¼öµµ ÀÖ´Ù. ¹Ý¸é, ÃÖ¼Ò°ªÀ» Å©°Ô ¼³Á¤Çϸé, ´õ ¸¹Àº "head room"ÀÌ »ý±â¹Ç·Î ´ÙÀ½ ÄÝ·º¼Ç ¶§±îÁö ½Ã°£À» Áö¿¬½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù. -XX:MinHeapFreeRatio ÀÇ °ªÀ» Å©°Ô ÇßÀ» ¶§ÀÇ ´ÜÁ¡Àº ½Ã½ºÅÛ ¸Þ¸ð¸®°¡ ÀÌ °¡»ó ÀåÄ¡¿¡ °íÁ¤µÇ±â ¶§¹®¿¡ »ç¿ëÀÚÀÇ ¶Ç ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ »ç¿ëµÉ ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù.
-XX ¼¼Æ®³»ÀÇ ´Ù¸¥ ºñÇ¥ÁØ ¿É¼ÇµéÀº °¡ºñÁö ÄÝ·ºÅÍÀÇ ÀÛµ¿ ¹æ¹ý¿¡ ¿µÇâÀ» ³¢Ä£´Ù. -XX:+UseConcMarkSweepGC Ä¿¸Çµå ¶óÀÎ Ç÷¡±×("concurrent mark sweep garbage collection"ÀÇ ÁÙÀÓ¸»)´Â º´Çà(concurrent) °¡ºñÁö ÄÝ·ºÅ͸¦ ½ÇÇà½ÃŲ´Ù. -XX:+UseConcMarkSweepGC ÄÝ·ºÅÍ´Â old generationÀ» µ¿½Ã¿¡ ÄÝ·ºÆÃÇÑ´Ù. ±× ÀÌÀ¯´Â Àü¹ÝÀûÀÎ ÄÝ·º¼Ç °°Àº old generation µéÀº ÄÝ·¢ÆÃÇÒ ¶§ ´ëüÀûÀ¸·Î ½Ã°£ÀÌ ¿À·¡ °É·Á¼ º´Çà °¡ºñÁö ÄÝ·ºÅ͸¦ ½ÇÇà½ÃŰ´Â °ÍÀÌ ´õ È¿°úÀûÀ̱⠶§¹®ÀÌ´Ù. ÀÌ´Â ¾ÖÇø®ÄÉÀ̼ǿ¡¼ °¡ºñÁö ÄÝ·º¼Ç ÈÞÁö ½Ã°£À» ª°Ô ÇÒ ¼ö ÀÖµµ·Ï ÇÁ·Î¼¼½Ì ÆÄ¿ö¸¦ Ȱ¿ëÇÑ´Ù´Â °ÍÀ» ¸»ÇÑ´Ù. -XX:+UseParallelGC Ä¿¸Çµå ¶óÀÎ Ç÷¡±×´Â º´·Ä °¡ºñÁö ÄÝ·ºÆÃÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. -XX:+UseParallelGC ÄÝ·ºÅÍ´Â ¿ÀÁ÷ ´ÙÁß ÇÁ·Î¼¼¼¸¦ ÀÌ¿ëÇÑ young generation¸¸À» ÄÝ·ºÆÃÇÑ´Ù. ÀÌ Á¢±Ù¹ýÀº ó¸®À²Àº ³ôÀÌÁö¸¸, Àü¹ÝÀûÀÎ ÄÝ·º¼ÇÀÇ ÈÞÁö ½Ã°£À» ÁÙÀÌÁö´Â ¸øÇÑ´Ù.
¶Ç ÇϳªÀÇ Èï¹Ì·Î¿î ¿É¼ÇÀÎ -XX:+PrintGCDetails ´Â °¢°¢ÀÇ ÄÝ·º¼Ç¿¡¼ °¢ generation¿¡ ¾î¶² ÀÏÀÌ ¹ß»ýÇß´ÂÁö¸¦ º¸¿©ÁØ´Ù. (´Ü, permanent generation ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×µéÀº º¸¿©ÁÖÁö ¾Ê´Â´Ù. ÀÌ Á¡Àº JDK 1.5.0.¿¡¼ ¼öÁ¤µÇ¾ú´Ù.)
SwingSet2ÀÇ µ¥¸ð¿¡ »ç¿ëµÈ -XX:+PrintGCDetailsÀÇ ¿¹Á¦¸¦ »ìÆìº¸ÀÚ. (Ãâ·Â°ªÀÇ ¶óÀεéÀº Å×Å©ÆÁ ÆäÀÌÁöÀÇ °æ°è¼±¿¡ ¸ÂÃß±â À§ÇØ ³ª´©¾îÁÖ¾ú´Ù.)
java -Xloggc:details.out -XX:+PrintGCDetails -jar
/home/eo86671/j2sdk1.4.2/demo/jfc/SwingSet2/SwingSet2.jar
0.000: [GC 0.000: [DefNew: 511K->64K(576K), 0.0182344 secs]
511K->153K(1984K), 0.0185255 secs]
1.387: [GC 1.387: [DefNew: 417K->64K(576K), 0.0192086 secs]
1.407: [Tenured: 217K->281K(1408K), 0.0725645 secs]
506K->281K(1984K), 0.0923346 secs]
1.559: [GC 1.559: [DefNew: 10K->3K(576K), 0.0044098 secs]
1.564: [Tenured: 937K->941K(1408K), 0.0741569 secs]
948K->941K(1984K), 0.0790573 secs]
1.703: [GC 1.703: [DefNew: 510K->0K(576K), 0.0011627 secs]
2107K->1597K(2808K), 0.0013820 secs]
2.210: [GC 2.210: [DefNew: 509K->64K(576K), 0.0112637 secs]
2107K->1710K(2808K), 0.0115942 secs]
2.927: [GC 2.927: [DefNew: 575K->64K(576K), 0.0170128 secs]
2222K->1841K(2808K), 0.0173293 secs]
8.430: [GC 8.430: [DefNew: 576K->64K(576K), 0.0142839 secs]
2353K->2025K(2808K), 0.0156266 secs]
8.823: [GC 8.823: [DefNew: 494K->64K(576K), 0.0164915 secs]
2456K->2243K(2808K), 0.0166323 secs]
8.856: [GC 8.856: [DefNew: 569K->41K(576K), 0.0058505 secs]
8.862: [Tenured: 2341K->1656K(2360K), 0.1464764 secs]
2749K->1656K(2936K), 0.1526133 secs]
º¯°æ³»¿ëÀÌ ±× °á°ú¿¡ ¾î¶² ¿µÇâ (¿¹¸¦ µé¾î¼, ÄÝ·º¼Ç°£ÀÇ ½Ã°£ ¿¬ÀåÀ̳ª °¢°¢ ƯÁ¤ ÈÞÁö ½Ã°£ÀÇ °¨¼Ò)À» ÁÖ´ÂÁö¸¦ ¾Ë¾Æº¸±â À§ÇØ -Xms ¿É¼Ç°ú -Xmx ¿É¼ÇÀ» Á¶Á¤Çغ¸ÀÚ.
¾Õ¼ 'generations'ÀÇ Èü °ø°£¿¡ ´ëÇØ ¾ð±ÞÇÑ ¹Ù ÀÖ´Ù. ÀÌ ¸»ÀÌ ¹«½¼ ÀǹÌÀÎÁö ±Ã±ÝÇÏ´Ù¸é, ¿©±â ©¸·ÇÑ ¼³¸íÀ» ÂüÁ¶ÇÏÀÚ. JRE 1.4.2 ¿¡¼ ÈüÀº young, old, ±×¸®°í permanet¿Í °°ÀÌ ¼¼ °³ÀÇ generationÀ¸·Î ±¸ºÐµÈ´Ù. young generationÀº °´Ã¼°¡ »ý¼ºµÈ Àå¼ÒÀÌ´Ù. ÀÌ generationÀÇ »çÀÌÁî´Â -XX:NewSize ¿É¼Ç°ú -XX:MaxNewSize ¿É¼Ç¿¡ ÀÇÇØ ÄÁÆ®·ÑµÈ´Ù. »õ·Î¿î °´Ã¼¸¦ º¸À¯ÇÏ°Ô µÇ¸é, old generationÀ¸·Î ½Â°ÝµÈ´Ù. old generationÀÇ »çÀÌÁî´Â Àüü Èü »çÀÌÁî (-Xms °ú -Xmx) ¿¡¼ young generationÀÇ »çÀÌÁî (-XX:NewSize °ú -XX:MaxNewSize)¸¦ °¨ÇÑ »çÀÌÁî·Î °è»êµÈ´Ù. young generationÀº ¸í½ÃÀû Å©±âº¸´Ù´Â -XX:NewRatio=¸¦ ÀÌ¿ëÇÏ¿© ´õ Àß ÁöÁ¤ÇÒ ¼ö Àִµ¥, -XX:NewRatio= ¿É¼ÇÀº Èü ¼³Á¤ÀÇ Àüü »çÀÌÁ ¼³Á¤ÇØÁֱ⠶§¹®ÀÌ´Ù. ¼±ÅÃÇÑ »çÀÌÁî´Â ÄÝ·ºÆÃ µÇ´Â ½Ã°£¿¡ ´ëÇØ ÄÝ·º¼ÇÀÇ È½¼ö¸¦ °áÁ¤ÇÏ°Ô µÈ´Ù. ¾î¶² ¾ÖÇø®ÄÉÀ̼ǵéÀº ªÀº ÈÞÁö ½Ã°£À» ¿ä±¸ÇÏ´Â ÇÑÆí, ÄÝ·ºÅÍÀÇ È¿À²¼ºÀ» ÇÊ¿ä·Î ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ǵ鵵 ÀÖ´Ù. (¸¹Àº ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ÀÌ ´Ü°èÀÇ Æ©´×À» ÇØÁÙ ÇÊ¿ä´Â ÀüÇô ¾ø´Ù.)
¸¶Áö¸·À¸·Î ¾ð±ÞÇÒ GC¿É¼ÇÀº -XX:+DisableExplicitGCÀÌ´Ù. System.gc()ÀÇ È£ÃâÀ» ÀÌ¿ëÇÏ¿© °¡ºñÁö ÄÝ·ºÅ͸¦ ½ÇÇàÇ϶ó´Â ¸í·ÉÀ» ÇßÀ» ¶§, ½Ã½ºÅÛÀÌ À̸¦ ¹«½ÃÇϱ⸦ ¿øÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» »ç¿ëÇØº¸ÀÚ. °¡ºñÁö ÄÝ·ºÅÍ´Â ÇÁ·Î±×·¡¸Ó°¡ ¸í·ÉÇßÀ» ¶§°¡ ¾Æ´Ñ, ÇÊ¿ä½Ã¿¡ °è¼ÓÇØ¼ ½ÇÇàµÇ°í ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ÇÁ·Î±×·¡¸ÓÀÇ ¸í·ÉÀ» ¹«½ÃÇÏ´Â °ÍÀÌ ÁÁÀº »ý°¢Àϱî? ¾Æ¸¶µµ ¾Æ´Ò °ÍÀÌ´Ù. ¿Ö³ÄÇϸé, ÇÁ·Î±×·¡¸Ó°¡ °¡ºñÁö ÄÝ·ºÅ͸¦ ½ÇÇàÇϱâ Àû´çÇÑ ½ÃÁ¡À̶ó°í »ý°¢ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð, ¸¸¾à °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇϰí ÀÖ°í, ½ÇÇà ÄÜÅØ½ºÆ®°¡ ÇÁ·Î±×·¡¸ÓÀÇ ¿ø·¡ÀÇ °èȹ°ú ´Ù¸£´Ù¸é, ÀÌ·¯ÇÑ »õ·Î¿î »óȲ¿¡ À¯È¿ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù.
°¡ºñÁö ÄÝ·º¼Ç¿¡ °ü·ÃµÈ ¿É¼Çµé¿¡ ´ëÇØ Á»´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¿øÇÑ´Ù¸é, Tuning
Garbage Collection with the 1.4.2 Java Virtual Machine¸¦ Àо±â ¹Ù¶õ´Ù. Æ©´×À» ÇÒ ¶§´Â Æ©´×ÀÇ ¸ñÀûÀÌ ¼º´É Çâ»óÀÎÁö, ªÀº ÈÞÁö ½Ã°£ÀÎÁö ¾Æ´Ï¸é ÀÛÀº ¹üÀ§ÀÇ ¤¤¸Þ¸ð¸® »ç¿ëÀ» À§ÇÑ °ÍÀÎÁö ±× ¸ñÀûÀ» È®½ÇÈ÷ ÇØ¾ß ÇÑ´Ù. JVMÀÌ ¾÷µ¥ÀÌÆ® µÇ¸é¼ ¼±ÅÃÇÒ ¼ö ÀÖ´Â Æ©´× ¿É¼Çµéµµ ´Ù½Ã Çѹø »ìÆì º¸¾Æ¾ß ÇÑ´Ù. À̹ø ÆÁ¿¡¼ ´Ù·é ¿É¼ÇµéÀÇ ´ëºÎºÐÀº ½ãÀÇ ·±Å¸ÀÓ È¯°æ 1.4.2 ¸±¸®Áî¿¡ ÇÑÁ¤µÊÀ» ±â¾ïÇÏÀÚ. 1.5.0 ¸±¸®Áî´Â °íÀ¯ÀÇ ÄÁÆ®·Ñ ¼Â°ú µðÆúÆ® ¼ÂÀ» °¡Áø´Ù.
º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù. °ü·Ã¹®ÀÇ : SunKorea@sun.com
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϽ÷Á¸é ¼ö½Å°ÅºÎ¸¦
Ŭ¸¯ÇØ ÁÖ¼¼¿ä.
Copyright 2003-2005 Sun Korea, Inc. All rights reserved.
|