[Java] 자바에서 메모리 해제..

leolo의 이미지

자바에서 메모리 해제를 어떻게 하죠..
현재 리눅스에서 jdk1.3을 깔고, 아파치, 톰캣을 돌리고 있는데..
계속해서 메모리 사용량이 증가합니다.

자바의 경우, 메모리가 자동으로 해제되는 것으로 알고 있는데...
자꾸 메모리가 증가하고 있습니다...

어떻게 된 원인이죠..

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
10 root 16 0 0 0 0 SW 0.3 0.0 0:05 0 kscand/HighMem
1281 ering 24 0 61620 60M 22208 S 0.3 5.9 0:54 0 java
2201 root 15 0 672 672 560 S 0.1 0.0 0:00 0 in.telnetd

coalash의 이미지

보여주신 값만으론 원인을 정확히 파악할 수가 없네요. trace 라도 떠서 보여주셔야.. -_-;

짐작가는 거만 우선 끄적거려보면.

0. 원칙적으로, java 에서 메모리 할당/해제는 vm 이 전담합니다. 즉, "자동으로만" 써야 한단 말이죠.
System.gc() 조차도 강제해제가 아니라 gc 타이밍을 앞당기는 것일 뿐입니다.

따라서, java 쪽에서 메모리 문제를 해결한다는 것은 jvm 이 해제를 빨리 할 수 있도록 객체의 상태를 만들어 주어야 하는거죠.

1. 자바에서 객체의 메모리 해제는 그 객체를 참조하는 객체가 없어야 작동합니다.
사용중인 객체를 해제하면 낭패니깐요.

혹, class 의 static member 로 선언됨 Hashtable 이나 List, Set 등에 담아두고 해제가 안된다고 하시면 곤란하죠.
jsp 등을 작성하실 때 실수하기 쉬운 부분입니다.

2. vm 시동시에 -Xmx 옵션을 주어서 최대로 쓸 수 있는 메모리의 제한을 주는 것도 할 수 있는 방법이겠네요.

3. jvm 에서는 반환했으나 운영체제상에서 이후 메모리 재할당을 위해 잠시 반환을 유보하는 경우가 있습니다. 이 경우엔, 다른 프로세스가 메모리를 요구할 땐 즉시 반환받아서 필요한 쪽으로 제공하니까 별 문제가 안되죠.

atie의 이미지

톰캣에서 수행되는 Java로 된 프로그램에 한번 수행이 끝난 시점에
Total Memory = Runtime.getRuntime().totalMemory()
Java Memory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()
를 찍어 보세요.
매번 수행이 될 때마다 토탈이 증가하면 자바외에 다른데서 메모리가 새는 것이고, 자바 메모리가 증가하면 수행 중인 자바 프로그램에서 메모리가 샌다고 보면 됩니다.
자바 프로그램에서 샌다면, 위에 답변된 것처럼 계속 참조할 필요가 없는 클래스가 다른 클래스에 의해 계속 참조가 되는지, static으로 선언된 Collection 클래스들이 정말 static이어야 하는지 다시 한번 살펴 보세요.

----
I paint objects as I think them, not as I see them.
atie's minipage

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.