'2013/03'에 해당되는 글 4건

  1. 2013.03.27 GDB에서 특정 쓰레드만 멈추게 하는 법
  2. 2013.03.26 mutable
  3. 2013.03.20 __attribute__ (packed) : 구조체 정렬
  4. 2013.03.06 Eclipse 속도 향상 팁


In non-stop mode, when a thread stops to report a debugging event, only that thread is stopped; gdb does not stop other threads as well, in contrast to the all-stop mode behavior. Additionally, execution commands such as continue and step apply by default only to the current thread in non-stop mode, rather than all threads as in all-stop mode. This allows you to control threads explicitly in ways that are not possible in all-stop mode — for example, stepping one thread while allowing others to run freely, stepping one thread while holding all others stopped, or stepping several threads independently and simultaneously.

To enter non-stop mode, use this sequence of commands before you run or attach to your program:

     # Enable the async interface.
     set target-async 1
     # If using the CLI, pagination breaks non-stop.
     set pagination off
     # Finally, turn it on!
     set non-stop on

You can use these commands to manipulate the non-stop mode setting:

set non-stop on
Enable selection of non-stop mode. 
set non-stop off
Disable selection of non-stop mode. 
show non-stop
Show the current non-stop enablement setting.

Note these commands only reflect whether non-stop mode is enabled, not whether the currently-executing program is being run in non-stop mode. In particular, the set non-stop preference is only consulted when gdb starts or connects to the target program, and it is generally not possible to switch modes once debugging has started. Furthermore, since not all targets support non-stop mode, even when you have enabled non-stop mode, gdb may still fall back to all-stop operation by default.

In non-stop mode, all execution commands apply only to the current thread by default. That is, continue only continues one thread. To continue all threads, issue continue -a or c -a.

You can use gdb's background execution commands (see Background Execution) to run some threads in the background while you continue to examine or step others from gdb. The MI execution commands (see GDB/MI Program Execution) are always executed asynchronously in non-stop mode.

Suspending execution is done with the interrupt command when running in the background, or Ctrl-c during foreground execution. In all-stop mode, this stops the whole process; but in non-stop mode the interrupt applies only to the current thread. To stop the whole program, use interrupt -a.

Other execution commands do not currently support the -a option.

In non-stop mode, when a thread stops, gdb doesn't automatically make that thread current, as it does in all-stop mode. This is because the thread stop notifications are asynchronous with respect to gdb's command interpreter, and it would be confusing if gdbunexpectedly changed to a different thread just as you entered a command to operate on the previously current thread.

' > 개발' 카테고리의 다른 글

VIM - 여러 파일 편집  (0) 2013.04.08
Eclipse에서 다른 유저의 프로세스 debug  (0) 2013.04.05
GDB에서 특정 쓰레드만 멈추게 하는 법  (0) 2013.03.27
vi 설정  (0) 2013.02.22
Difftool  (0) 2012.12.17
No repository found in Eclipse  (0) 2012.11.27
Posted by 라판


프로그래밍언어 2013.03.26 12:21

The mutable storage class specifier (C++ only)

The mutable storage class specifier is used only on a class data member to make it modifiable even though the member is part of an object declared as const. You cannot use the mutable specifier with names declared as static or const, or reference members.

In the following example:

class A
    A() : x(4), y(5) { };
    mutable int x;
    int y;

int main()
  const A var2;
  var2.x = 345;
  // var2.y = 2345;

the compiler would not allow the assignment var2.y = 2345 because var2 has been declared as const. The compiler will allow the assignment var2.x = 345 because A::x has been declared as mutable.


'프로그래밍언어' 카테고리의 다른 글

쉘 프로그래밍  (0) 2013.05.27
JAVA GC에 대한 좋은 글들  (0) 2013.05.02
mutable  (0) 2013.03.26
__attribute__ (packed) : 구조체 정렬  (0) 2013.03.20
각 언어별 데이터 표현 범위 비교  (0) 2013.01.11
OLTP vs OLAP  (0) 2012.11.15
Posted by 라판

unaligned data에 대한 atomic operation의 동작을 확인하기 위해 unaligned data를 만들어야 되었는데, 방법을 몰라 헤매이다,. __attribute__ (packed)를 쓰면 된다는 것을 알게 되었다. 

Found in versions: 2.7-3.4
     This attribute, attached to `struct' or `union' type definition,
     specifies that each member of the structure or union is placed to
     minimize the memory required. When attached to an `enum'
     definition, it indicates that the smallest integral type should be

     Specifying this attribute for `struct' and `union' types is
     equivalent to specifying the `packed' attribute on each of the
     structure or union members.  Specifying the `-fshort-enums' flag
     on the line is equivalent to specifying the `packed' attribute on
     all `enum' definitions.

     In the following example `struct my_packed_struct''s members are
     packed closely together, but the internal layout of its `s' member
     is not packed - to do that, `struct my_unpacked_struct' would need
     to be packed too.

          struct my_unpacked_struct
              char c;
              int i;
          struct my_packed_struct __attribute__ ((__packed__))
               char c;
               int  i;
               struct my_unpacked_struct s;

     You may only specify this attribute on the definition of a `enum',
     `struct' or `union', not on a `typedef' which does not also define
     the enumerated type, structure or union.


'프로그래밍언어' 카테고리의 다른 글

JAVA GC에 대한 좋은 글들  (0) 2013.05.02
mutable  (0) 2013.03.26
__attribute__ (packed) : 구조체 정렬  (0) 2013.03.20
각 언어별 데이터 표현 범위 비교  (0) 2013.01.11
OLTP vs OLAP  (0) 2012.11.15
Java Collection 구조 설명  (0) 2012.11.03
Posted by 라판

Eclipse 속도 향상 팁

2013.03.06 16:07

참고로, eclipse.ini에 대한 위키는 여기를 참조:

* eclipse.ini 파일을 다음과 같이 수정

 원본수정 후 



* 설명

-Xverify:none                         // 클래스 검사 생략. 이클립스 실행 시간이 줄어든다.
-XX:+UseParallelGC               // Parallel Collector를 사용. 병렬 가비지 컬렉션.
-XX:-UseConcMarkSweepGC // 병행 mark-sweepGC 기능을 수행하여 GUI 응답 속도 처리
-XX:PermSize=32M                // 이클립스 클래스 로딩 기본 메모리
-XX:MaxPermSize=128M       // 이클립스 클래스 로딩 최대 메모리
-XX:NewSize=32M                 // JVM에서 새로운 객체가 생성 될때 로딩되는 최소 영역
-XX:MaxNewSize=32M           // JVM에서 새로운 객체가 생성 될때 로딩되는 최대 영역
-Xms256m                            // 이클립스 실행시 잡는 최소 메모리
-Xmx256m                            // 이클립스 실행시 잡는 최대 메모리

* Xms와 Xmx를 똑같이 잡아 주는 이유는 이클립스가 메모리를 유동적으로 관리하는데 이걸 정적으로 고정시켜 주기 위해서이다. 유동적으로 관리하게 놔두면 자바는 메모리가 부족할때 확보하려고 메모리 할당을 하게 되고 메모리의 여유가 있으면 남는 메모리를 조금씩 시스템으로 돌려버린다. 이러한 작업때문에 이클립스 속도가 더 느려지기에 아예 처음부터 최소값과 최대값을 고정시켜 버리면 불필요한 작업을 하지 않게 된다. 물론 메모리 값은 컴퓨터 사양에 따라 수정해주시면 된다. 

* 힙 메모리 정리
Window -> Perference -> General  에서 'Show heap status'에 체크.

체크를 해주면 이클립스 오른쪽 하단에 현재 메모리 사용량과 휴지통 아이콘이 생긴다.
힙에 메모리가 많이 쌓였을때 휴지통을 눌러서 한번씩 날려주면 빨라진다.

* 코드 오토 어시스트 기능 비활성화
코드 어시스트 기능을 끈다. 단축키 ctrl + space 로 코드 어시스트 사용가능하다.
Window -> Preferences -> Java -> Editor -> Code Assist tab 에서 'Enable auto activation' 을 꺼준다.

아래의 글은 Sun(Oracle?) Hotspot JVM을 기반으로 정리한 내용이다.

JVM에서 GC는 크게 Minor GC와 Major GC로 나뉜다. Minor GC는 Young Generation영역을 정리하는 GC이고, Major GC는 Old Generation영역을 정리하는 GC이다. 그리고 Major GC는 Full GC로도 불린다. 하지만 일부 CMS Collector를 설명하는 글에서는 Major GC와 Full GC를 구분하기도 하는 것 같다. Major GC와 Full GC의 명확한 구분은 잘 모르겠다.

                     Java Heap Memeory 구조

GC의 종류는 아래와 같다. 
1. Serial Collector
  - 단일 Thread로 GC 작업을 수행
  - "-XX:+UseSerialGC" 옵션 사용하여 활성화 할 수 있다. 
  - 요즘 H/W환경에서는 사용할 필요가 없는? GC라고 생각된다.
2. Parallel Collector
  - 복수의 Thread로 GC작업을 수행한다 
  - "-XX:+UseParallelGC" 옵션을 사용하여 Minor GC 에서 parallel collector를 활성화 할 수 있다.
  - "-XX:+UseParallelOldGC" 옵션을 사용하여 Major GC에서 parallel collector를 활성화 할 수 있다. 
  - 복수의 Thread를 사용하여 GC를 수행하기 때문에 Serial Collector에 비해서 GC가 빨리 수행된다.
  - 최대 성능을 내기 위한 GC라고 생각된다.

3. CMS Collector
  - Major GC 실행시 Application Thread와 GC Thread가 동시에 수행된다. (GC의 6단계 중에서 2단계에서만 Application Thread를 Block 하며 나머지 4단계는 동시에 수해된다.)
     * 참조 :  http://www.javaperformancetuning.com/news/qotm026.shtml
  - "-XX:+UseConcMarkSweepGC" 옵션을 사용하여 활성화 할 수 있다. 
  - Minor GC에서 Parallel Collector를 활성화하기 위해서는 "-XX:+UseParNewGC" 옵션을 사용해야 하며,  "-XX:+UseParallelGC" 와는 같이 사용해서는 않된다!!!
  -  Parallel Collector GC 보다는 최대 성능이 낮게 나오지만, GC로 인한 Application Thread 정지 시간을 최소화 하여 응답시간 지연을 줄이고자 하는 경우 사용된다.
  - CMS Collector에 의한 Major GC가 수행되는 동안 Application에 의해서 Old generation 영역이 꽉차게 되면, 모든 Application Thread를 멈추고, Full GC를 수행하게 된다.

JVM Heap 메모리 및 GC 옵션 예제
  - 최소 사이즈 : -Xms128m
  - 최대 사이즈 : -Xmx384m
 - GC 로그 옵션 
   > -verbose:gc -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
  - Young Gen 영역을 위한 옵션 
    > -XX:NewSize=100m -XX:MaxNewSize=100m -XX:SurvivorRatio=32
  - GC 소요시간 최소화 옵션
    > -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-CMSParallelRemarkEnabled
  - 성능을 위한 기타 추가 옵션
    > -XX:MaxTenuringThreshold=0 -XX:CMSInitiatingOccupancyFraction=60
  - OutOfMemoryError 발생시 자동으로 힙덤프 생성 옵션
    > -XX:+HeapDumpOnOutOfmemoryError -XX:HeapDumpPath=/path

JVM 옵션 상세 정보 참고자료 :  http://wiki.ex-em.com/index.php/JVM_Options

기타 툴
  - Java Stack Trace (dead lock 분석)
    > jps   [java 프로세스 확인]
    > kill -3 <pid>  [IBM JDK]

    > $JAVA_HOME/bin/jstack <pid>   [Hotspot JDK
  - Runtime JVM Heap Dump 생성
    > jmap -dump:format=b,file=heap.hprof [pid]
  - 힙덤프 분석 툴 : jhat, MemoryAnalyzer, visualvm

'' 카테고리의 다른 글

VMWARE workstation 7.1.4 patch for kerenel 3.1  (0) 2013.06.28
NX Client 속도 향상  (0) 2013.04.27
[명령어] 특정유저 프로세스 강제 종료 명령어  (0) 2013.04.08
NX 단축키  (0) 2013.04.05
Eclipse 속도 향상 팁  (0) 2013.03.06
Posted by 라판