자바 여러가지나
퍼포먼스 등 잘나와있다.

http://www.javamex.com/



Java Object
메모리 사용량

Java type

Bytes required

boolean

1

byte

char

2

short

int

4

float

long

8

double

reference

(pointer)

4

array

+4 (for length)

모든 Object8byteHeader(Housekeeping data)를 갖고, 무조건 8의 배수이다.

ex) 1개의 boolean을 가지고 있다면

Header 8 + boolean 1 + padding 7 = 18bytes

 

Array 기본

Header 8 + length정보 4 + Object*length + padding

(boolean array는 무조건 boolean하나당 8bytes)

 

 

String

C라면 unicode를 다루지 않기 때문에 1byte*문자수 + 1byte이지만 Java에선 전혀 다르다.

Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45) / 8)

 

Housekeeping 8 + array 12 + padding(multiple of 16bytes (32-bit))

문자 1개당 2byte

다른 여러 변수들(사용하지 않더라도)

 

다시, 아무것도 없는 String

{ char[]Rerference 4 + 3개의 int변수 4*3 + header 8 + padding(8) 0 } + emptyArrayString 12 + padding(16) 4

=> 40bytes를 사용. (C에서는 1bytes)

 

ex) 17개의 문자열은

{ char[]Rerference 4 + 3개의 int변수 4*3 + header 8 + padding(8) 0 } + 17ArrayString (12+17*2) + padding(16) 2

=> 72바이트 사용. (C에서는 18bytes)

1. We're actually being slightly unfair here. In C, a 17-character string plus terminator may well require just 18 bytes on the stack. But if you were to allocate 18 bytes to store the string via malloc(), then that allocation from the malloc heap would generally require some extra bytes of "housekeeping", just as for a Java object. (It would typically require in the order of 8 or so bytes, howeverstill a big difference!)

 

(substringparent와 메모리 공유 -> 절약가능)

 

http://www.javamex.com/tutorials/memory/string_saving_memory.shtml

 

public class CompactCharSequence implements CharSequence, Serializable

{

static final long serialVersionUID = 1L;

 

private static final String ENCODING = "ISO-8859-1"

private final int offset

private final int end

private final byte[] data

 

public CompactCharSequence(String str)

{

try

{

data = str.getBytes(ENCODING);

offset = 0;

end = data.length

}

catch (UnsupportedEncodingException e)

{

throw new RuntimeException("Unexpected: " + ENCODING + " not supported!");

}

}

 

@Override

public char charAt(int index)

{

int ix = index + offset

if (ix >= end)

{

throw new StringIndexOutOfBoundsException("Invalid index " + index + " length " + length());

}

return (char) (data[ix] & 0xff);

}

 

@Override

public int length()

{

return end - offset

}

private CompactCharSequence(byte[] data, int offset, int end)

{

this.data = data;

this.offset = offset;

this.end = end;

}

@Override

public CharSequence subSequence(int start, int end)

{

if (start < 0 || end >= (this.end - offset))

{

throw new IllegalArgumentException("Illegal range " + start + "-" + end + " for sequence of length " + length());

}

return new CompactCharSequence(data, start + offset, end + offset);

}

@Override

public String toString()

{

try

{

return new String(data, offset, end - offset, ENCODING);

}

catch (UnsupportedEncodingException e)

{

throw new RuntimeException("Unexpected: " + ENCODING + " not supported");

}

}

}

신고
Posted by Leo 리오 트랙백 0 : 댓글 0
http://www.eclipse.org/swt/snippets/ 
http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm 


신고
Posted by Leo 리오 트랙백 0 : 댓글 0

신고
Posted by Leo 리오 트랙백 0 : 댓글 0

신고
Posted by Leo 리오 트랙백 0 : 댓글 0

신고
Posted by Leo 리오 트랙백 0 : 댓글 0

신고

'Program Language > JAVA' 카테고리의 다른 글

SWT Snippets : ExpandBar.. (Updating..)  (0) 2011.07.15
SWT Snippets : Path.. (Updating..)  (0) 2011.07.15
SWT Snippets : TabFolder.. (Updating..)  (0) 2011.07.15
LWJGL Eclipse에서 설정법  (0) 2011.07.15
java remote debugging (자바 원격 디버깅)  (0) 2011.06.24
JVM  (0) 2011.05.04
Posted by Leo 리오 트랙백 0 : 댓글 0
http://sourceforge.net/projects/java-game-lib/files/Official%20Releases/ 
여기서 최신 버전에 들어간다.

세개 다운



lwjgl-2.7.1.zip에서는 jar폴더와 native폴더만 가져오고





나머지두개는 알아서 풀기


 

Window -> Preferences -> Java -> Build Path -> User Libraries -> New
아래 그림처럼
1. lwjgl.jar파일 할당
2. javadoc 폴더 할당
3. source 폴더 할당
4. native library폴더 할당 (운영체제에 맞게)
  


필요하면
lwjgl_util.jar 등도 똑같이 설정해준다.




 -swt.snippets에 적용 예

프로젝트 우클릭 Preferences 


프로젝트에 User Library 추가

 

신고

'Program Language > JAVA' 카테고리의 다른 글

SWT Snippets : ExpandBar.. (Updating..)  (0) 2011.07.15
SWT Snippets : Path.. (Updating..)  (0) 2011.07.15
SWT Snippets : TabFolder.. (Updating..)  (0) 2011.07.15
LWJGL Eclipse에서 설정법  (0) 2011.07.15
java remote debugging (자바 원격 디버깅)  (0) 2011.06.24
JVM  (0) 2011.05.04
Posted by Leo 리오 트랙백 0 : 댓글 0

자바프로그램을 디버깅할때

코딩하는 기기와 프로그램을 실행시키는 기기가 다를때가 있다. (서버작업등..)

이때 jdb나 이것저것들을 써봤는데  잘 안되더라...


이클립스를 이용해서 원격 디버깅이 가능하다.


1. 자바실행 옵션 설정

디버깅을 사용가능하게 옵션을 설정해준다.

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
addrress : 8000 리모트 연결에 사용할 포트
suspend : 디버깅 연결이 연결될때 가지 기다릴지 설정

ex) java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y" HelloWorld


2. 이클립스 원격 디버깅실행

Run-> Debyg Configurations Remote Java Application -> 우클릭 -> add -> Host:(서버주소), port:(위에서 설정한 포트) --> Debug -> 디버그!!







참고:
서버상에서 jdb로 디버깅

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000







참고 사이트들
http://www.screaming-penguin.com/node/7353 

http://www.jopwiki.com/Java_Debug_Wire_Protocol
http://www.techrepublic.com/article/debug-your-java-code-with-ease-using-jpda/6139512
http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html 
신고

'Program Language > JAVA' 카테고리의 다른 글

SWT Snippets : ExpandBar.. (Updating..)  (0) 2011.07.15
SWT Snippets : Path.. (Updating..)  (0) 2011.07.15
SWT Snippets : TabFolder.. (Updating..)  (0) 2011.07.15
LWJGL Eclipse에서 설정법  (0) 2011.07.15
java remote debugging (자바 원격 디버깅)  (0) 2011.06.24
JVM  (0) 2011.05.04
Posted by Leo 리오 트랙백 0 : 댓글 0

JVM

2011.05.04 10:58 from Program Language/JAVA
JVM Stacks

JVMStack 은 Thread 마다 하나씩 접근 불가능.
제거: 정상종료;pop
        비정상종료;exception처리때 삭제 

StackFrame
크기는 컴파일 타임에 결정.
-LocalVariable Section 
int,boolean..등등을 제외한 모든 객체는 Reference로 넘김(당연..)
맨위(stack top) 0번index에는 this가 저장됨.
-Operand Stack
연산을위한 operand스택 (register와같은 역할을하는거같다.)
a+b=c a와 b를 operand스택에 넣고 덧셈을 호출하면 더해져서 결과값으로 교체된다.
-Frame Data 
신고

'Program Language > JAVA' 카테고리의 다른 글

SWT Snippets : ExpandBar.. (Updating..)  (0) 2011.07.15
SWT Snippets : Path.. (Updating..)  (0) 2011.07.15
SWT Snippets : TabFolder.. (Updating..)  (0) 2011.07.15
LWJGL Eclipse에서 설정법  (0) 2011.07.15
java remote debugging (자바 원격 디버깅)  (0) 2011.06.24
JVM  (0) 2011.05.04
Posted by Leo 리오 트랙백 0 : 댓글 0