달력

52024  이전 다음

  • 1
  • 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

[성능] VisualVM

성능 2009. 1. 18. 21:29

VisualVM 이라는 성능체크 또는 모니터링 툴이 있습니다.
라이센스는 GPLv2 + CE입니다.
홈페이지인 https://visualvm.dev.java.net/ 에서는 All-in-One Java Troubleshooting Tool 이라고 소개하고 있습니다.
제공하고 있는 기능 자체만 보면 All-in-One 이라고 볼수 있겠지만 실제 기능 각각을 사용하다보면 아쉬운 점은 있습니다.

리뷰라기 하기엔 다소 빈약한 글입니다만.. 살펴봤습니다.
화면 스샷과 간단한 설명은 다음 링크들에서 볼 수 있습니다.
사실 설명보다는 스샷이 대부분입니다. ^^

VisualVM 기본 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm
VisualVM의 모니터링 기능 활용하기 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm_monitor
VisualVM의 쓰레드 모니터링 기능 활용하기 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm_thread
VisualVM의 프로파일러 기능 활용하기 : http://openframework.or.kr/Wiki.jsp?page=Using_visualvm_profiler

1. VisualVM 의 기본화면


2. 모니터링 기본 화면


3. 힙 덤프


4. 쓰레드 덤프


5. 프로파일러


제품을 사용해보니 간간히 눈에 띄는 버그가 있습니다.
1. 톰캣 비정상 종료
이를테면 eclipse에서 tomcat를 시작할 경우 VisualVM으로 프로파일링을 하면 tomcat을 강제로 죽이는 문제가 있습니다. 이 경우 VisualVM을 먼저 실행하고 eclipse를 실행해서 사용하면 tomcat이 죽는 경우가 별로 없습니다. 사실 이것도 PC마다 다를수 있겠습니다.
2. CPU프로파일링 기준 모호
그외 프로파일러 기능에서 CPU프로파일링시 호출되는 메서드 별로 데이터를 보여주는 것이 아니라 클래스 별로 보여준다고 할까요..?? 프로파일링 데이터의 기준이 다소 모호한 면이 있습니다. 그게 아니라면 설정이 다른데 숨어있다고 밖에 볼수 없겠습니다.

아직 버전이 1.1이기 때문에 개선의 여지가 많습니다. 저는 개인적으로 JProfiler 정식 사용자라 제품간에 비교가 되기는 하지만 상용제품과 비교하는 건 말이 안되는 것이죠.
하지만 힙덤프, 쓰레드덤프, 메모리덤프 등.. 좋은 기능을 많이 제공하고 있습니다.
Posted by fromm0
|

[eclipse] 2008년 정리

자바 2009. 1. 16. 13:52
2009년도 어느덧 보름이나 지났습니다.
eclipse프로젝트에서 2008년을 빛낸 사람과 관련 툴등에 대한 설문조사가 있었던 듯 합니다.
결과는 크게 사람에 대한 부분과 기술에 대한 부분으로 나누어 발표되었습니다.

일부만 공개된 것으로 보이며 일단 공개된 부분은
사람쪽은
  1. Top Ambassador
  2. Top Committer
  3. Top Contributor
  4. Top Newcomer Evangelist 
기술에 대해서는
  1. Best Commerical Eclipse-Based Developer Tool
  2. Best Open Source Eclipse-Based Developer Tool
  3. Best Commercial Equinox Application
  4. Best Commercial RCP Application
  5. Best Open Source RCP Application

기술만 보면 Best Open Source Eclipse-Based Developer Tool 부분에서 EclEmma 와 Spring IDE 가 맞붙은 것으로 보이는데 EclEmma라는 소스커버리지 툴이 이겼습니다.
RCP라던가 다른 부분에 대해서는 개인적으로 알지 못해.. 뭐라고 하기가 어렵네요.

관련 페이지는
http://www.eclipse.org/org/foundation/eclipseawards/index.php
http://www.eclipse.org/org/foundation/eclipseawards/winners08.php
http://www.eclipse.org/org/foundation/eclipseawards/technology_nominations.php <- 이건 아직 페이지가 만들어지지 않았나 봅니다.
Posted by fromm0
|


java.net 에서 투표중인 것으로 보입니다. 아직 732명 밖에 하지 않아서 결과 자체에 큰 의미를 두는 것은 무리일듯 합니다. 제가 볼때는 3가지로 요약이 될듯 하기는 합니다. JavaFX, Java7 에서 클로저를 포함하지 않는것, 그리고 동적 언어 지원 그외 댓글을 보면 OSGI에 대한 언급도 있긴 합니다만 아직은 얼리어댑터에 가까운 기술이 아닌가 생각합니다.

개인적으로 2008년에는 신기술 습득에는 별로 시간을 할애하지 않아 그런가 보다.. 라는 생각밖에 안 드네요.
제가 2009년에 계획중인 것을 정리한 말들입니다.

소통
다시보기
제대로알기
다양한 경험과 많은 자료 만들기
정리

'일상' 카테고리의 다른 글

[팁] Live USB Creator  (0) 2009.01.30
[생각] 시각과 시간  (2) 2009.01.16
[일상] Windows 7 베타  (0) 2009.01.10
[일상] 갑작스럽게 증가한 블로그 방문 횟수  (2) 2009.01.09
[일상] 위키 업타임  (0) 2009.01.05
Posted by fromm0
|
앞서 "[생각] 자바는 참 어려운 언어.." 라는 글에도 봤지만 JVM위에 올라가는 언어들은 JDK가 기본적으로 제공하는 그리고 Java쪽의 관련 라이브러리들이 제공하는 기능을 좀더 사용하기 쉽게 래피하는 형태가 많습니다.
그 중 하나가 HTTPBuilder 입니다.

Apache의 HttpClient 를 한번 더 래핑했습니다. 그리고 Prototype.js의 Ajax.Request 개념을 사용했기 때문에 비동기 호출이 가능합니다.

import groovyx.net.http.*;
import static groovyx.net.http.ContentType.TEXT

def http = new HTTPBuilder('http://www.google.com')

http.get( path : '/search',
          contentType : TEXT,
          query : [q:'Groovy'] ) { resp, reader ->

  println "response status: ${resp.statusLine}"
  println 'Response data: -----'
  System.out << reader
  println '\n--------------------'
}

http://openframework.or.kr/Wiki.jsp?page=Using_Groovy_HTTPBuilder 에 간단히 정리해봤습니다.

'자바' 카테고리의 다른 글

[자바] 인코딩  (1) 2009.01.30
[eclipse] 2008년 정리  (1) 2009.01.16
[메모] 웹애플리케이션의 실제 경로 가져오기  (0) 2009.01.08
[Ant] Ant로 SVN 작업 처리하기  (0) 2008.12.26
[일상] 일요일 위키에 추가한 내용  (0) 2008.12.21
Posted by fromm0
|
webwork를 사용중입니다.
프로젝트 특성상 웹애플리케이션의 가장 상위 경로를 동적으로 가져와야 합니다.
잘 해보지 않아서 또는 API를 주의깊게 보지 않아서 어떻게 가져오지..? 를 다른 팀원과 함께 찾아봤습니다.

ServletActionContext.getServletContext().getRealPath("");

방법은 의외로 간단합니다.
메모입니다. ^^
Posted by fromm0
|
최근 서버 호스팅을  옮기고 이런 저런 셋팅을 변경하면서 과거 웹호스팅시 서버가 자주 죽던 현상이 도대체 왜 발생한 것인지가 궁금해서 Jennifer를 설치해봤습니다.
제가 가기고 있는 JProfiler 를 돌려도 되지만 아무래도 오랜시간을 모니터링을 해야 하는 터라 프로파일러는 적합하지 않다고 생각을 했습니다.

설치하기

설치는 비교적 간단했습니다.
제가 운영하는 서버가 JDK 1.6, tomcat 6.0을 사용하고 32bit 라는 것만 알고 있다면 설정상에서 어려움은 없었습니다. 단 -64d 옵션이 처음에 뭔가 하다가 64bit를 나타낸다는 것을 알았는데 처음 사용자의 경우 그 부분에 대한 배려가 별로 없었던게 아닌가 하는 생각이 아주 잠깐(?) 들었습니다.


지원하는 was종류입니다. 국내제품이라서 그런지 외사 제품이 지원하지 않는 JEUS가 있습니다.
jprofiler를 만들어내는 ej-technologies사에 JEUS지원해달라고 요청한 뒤 아무런 답변이 없는 것에 비하면 국내에서는 이것만 해도 굉장히 큰 장점이 되리라 생각됩니다.


64비트에 해당되는 -d64 옵션을 사용할 것인지에 대한 부분입니다. 처음 설치시 "y" 로 선택해서 했는데 잘 통과되더니 실제 사용시 맞지 않다는 오류가 함께 에러가 발생했습니다. 개인적으로 보완이 필요하지 않나 생각됩니다.
추후 다시 설정해서 32비트로 사용하기 위해 "n" 를 선택하니 별다른 문제가 없습니다.


사용할 에이전트 이름을 물어봅니다. 그냥 w11이라고 사용했습니다.


설정된 환경값입니다. 확인차 보여주는 거라.. ^^

어드민 화면

# 로그인 화면

기본 계정이 admin/admin 이기 때문에 로그인만 하면 됩니다.

# 대시보드

제니퍼에 접속시 가장 처음 보게 되는 대시보드입니다.
제니퍼가 제공하는 모니터링 기능의 대부분을 한 화면에서 제공하는데 아무래도 제가 업무용으로 사용하는 24인치 와이드 모니터 정도는 되어야 전체를 한번에 볼수 있습니다. 그냥 이 화면만 봐도 서버 상태를 파악할 수 있습니다.

# 메뉴정보

메뉴별로 다시 하위메뉴로 다시 분류되는 부분도 있습니다. 메뉴나 화면들이 무엇을 나타내는지는 쉽게 파악이 되지만 정식으로 라이센스를 구매한 사용자라면 간단한 교육을 받아주는게 좋을듯 합니다.

# 서비스 처리 정보

제가 운영하는 위키가 레퍼런스와 같은 정적 컨텐츠는 tomcat을 거치지 않기 때문에 잡히지 않기도 하고 사용자가 적은 시간대를 선택해서 인지 거의 변화가 없습니다.

# 자바 힙 정보

제가 이번에 제니퍼를 적용해서 모니터링 하고자 하는 실제 값입니다. 자바 힙의 사용정보..단순 이미지가 보여드릴수 없지만 계속 늘쑥날쑥 합니다.

# X-View


제니터의 가장 중요한 기능중 하나인 X-View로 알고 있습니다. 음 역시 접속자가 많은 서비스도 시간대도 아니다 보니.. 한적합니다.

# 실시간 업무처리량

실시간을 모니터링하는 항목에서 업무처리량에 관련된 값들입니다. 요청율, 응답시간, 호출횟수, 방문자 수등을 제공합니다.

# 실시간 사용자

실시간 사용자 정보입니다. 서비스 개수, 호출횟수, 방문자 수 등 앞서 본 실시간 업무처리량에서 본 데이터와 일부 중복되는 데이터도 있습니다.

# 실시간 메모리

제가 가장 중요하게 보고 있는 실시간 메모리 정보입니다. 그래프가 그다지 맘에 들지 않는데요. ^^

# 설정창


화면 우측 상단의 메모리 정보 같은 부분을 클릭하면 설정메뉴가 뜹니다. 설정이 가능한 부분은 언어설정과 스타일(white, black) 그외 보이는 정도입니다.

에러

# AWT의 NullPointerException


저의 경우 간혹 발생하고 있습니다. 로그인을 정상적으로 해도 발생하고 빈번하지는 않습니다만 간혹 발생하는게 사실입니다. 위는 에러창인데 실제 화면에서는 "오류" 라고 표기되면서 화면이 뜨지 않습니다.
사용하는 JDK가 1.6.0_10 입니다.

# 웹브라우저가 죽는 현상
이 에러도 간혹 발생하는데 웹브라우저가 간혹 죽습니다. 처음에는 다른게 원인이라고 생각했으나 웹브라우저를 띄우고 제니퍼 어드민에 접속한 후 그대로 놔두면 죽어 있습니다. 초기 접속시 메모리 어쩌고 했던 알림창이 기억나는데 그거 때문인가 하는 생각을 하고 있습니다.


내용은 살펴보면서 더 추가될 껍니다. ^^



'성능' 카테고리의 다른 글

[성능] JProfiler 사용법 정리  (0) 2013.02.19
[성능] VisualVM 플러그인 이야기  (0) 2009.01.18
[성능] VisualVM  (2) 2009.01.18
[일상] java.lang.management 아래 관리 인터페이스  (3) 2008.12.27
[리뷰] 프로파일러 비교  (0) 2008.08.03
Posted by fromm0
|
JDK 1.5 이후 java.lang.management아래에는 관리 인터페이스로 많은 MXBean을 제공합니다.
제가 알고 있는 오픈소스 모니터링및 관리툴인 Lambda Probe 에 비하면 많은 부분 작업을 더해야 겠지만 기본적인 기능만으로도 간단한 모니터링이 가능합니다.

JMX나 다른 기타 기능을 통해 통합 모니터링 시스템을 만들수 있으리라는 짐작을 하게 합니다.
시간을 내어 간단히 인터페이스 기능만을 사용해 웹 페이지를 꾸며봤습니다.
http://monitor.openframework.or.kr/index.jsp

좀 지속적으로 해보고자 구글에는 프로젝트로 등록했구요. ^^
http://code.google.com/p/monitoring-application/

아직 구문번역은 대충 해놓은 상태입니다. 오역이나 의견이 있으시면 바로 알려주셔도 됩니다.. 그럼 감사하죠..^^


# GC정보보기


# 메모리 정보보기


# 런타임 정보보기


# 쓰레드 정보보기


메모리 사용에 대해 어떤 경계점을 지날 경우 자동알림도 가능하겠네요. 물론 코딩이 좀 들어가야 겠지만
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/MemoryNotificationInfo.html

아무튼 이미 이런 기능이 JDK 1.5에도 많이 추가되어 있는데 사용하는 건 극히 일부라는걸 항상 느끼게 됩니다.


'성능' 카테고리의 다른 글

[성능] JProfiler 사용법 정리  (0) 2013.02.19
[성능] VisualVM 플러그인 이야기  (0) 2009.01.18
[성능] VisualVM  (2) 2009.01.18
[일상][작성중] Jennifer 4.0 사용기  (0) 2008.12.30
[리뷰] 프로파일러 비교  (0) 2008.08.03
Posted by fromm0
|
제목이 좀 그렇긴 한데 정확하게 쓰자면 "groovy 로 작성한 코드를 java애플리케이션에서 사용하기" 가 될 것 같습니다. JVM위에서 돌아가는 많은 언어가 나왔습니다. 예를 들면 groovy, JRuby, Jython 등등 많죠. JVM에서 돌아가기때문에 즉 JVM이 그 각각의 코드를 알아볼수 있다면 당연히 java애플리케이션에서 사용할 수 있으리라는 짐작이 갑니다. 그래서 한번 해봤습니다. ^^

# groovy 코드(builder를 이용해서 XML생성)
package openframework.groovy

import groovy.xml.*
import java.io.*

class XMLBuilder{
    def getXML() {
        def writer = new StringWriter()
        def builder = new MarkupBuilder(writer)
        def friendnames = [ "Julie", "Joey", "Hannah"]

        builder.person() {
            name(first:"Megan", last:"Smith") {
                age("33")
                gender("female")
            }
            friends() {
                for (e in friendnames) { friend(e) }
            }
        }
        return writer.toString()
    }
}

groovyc 명령어를 통해 컴파일을 합니다. 그럼 당연히 openframework.groovy 패키지 아래 XMLBuilder.class라는 파일이 생성됩니다. 실제로는 아래처럼 다양한 클래스 파일이 생성됩니다.
무려 4개나 생성되네요. ^^

자바코드를 만들어봅니다.

# java 코드(groovy코드를 통해 xml을 생성)
package openframework;

import openframework.groovy.XMLBuilder;

public class Test {
    public static void main(String[] args) {
        XMLBuilder builder = new XMLBuilder();
        System.out.println(builder.getXML());
    }
}

# 결과물
<person>
  <name first='Megan' last='Smith'>
    <age>33</age>
    <gender>female</gender>
  </name>
  <friends>
    <friend>Julie</friend>
    <friend>Joey</friend>
    <friend>Hannah</friend>
  </friends>
</person>

순수 자바에 비하면 좀더 간단하게 기능을 구현할 수 있는 방법은 JVM위에 돌아가는 많은 스크립트 언어가 아닐까 하는 생각으로 테스트 해봤습니다. 단점도 있겠죠..?? 유지보수라고 할수도 있겠지만. 글쎄요.. ^^
다양한 생각을 해보고 싶어서 해본 테스트 결과였습니다.

'자바' 카테고리의 다른 글

[Ant] Ant로 SVN 작업 처리하기  (0) 2008.12.26
[일상] 일요일 위키에 추가한 내용  (0) 2008.12.21
[생각] 자바는 참 어려운 언어..  (17) 2008.12.21
[JDK] JDK 7의 변경사항  (4) 2008.12.20
[REST] jersey로 REST구현하기  (2) 2008.12.16
Posted by fromm0
|
자바라는 프로그램 언어로 6년가까이 돈을 벌고는 있지만 "자바"라는 언어가 참 어렵다는 생각은 간혹 합니다.
제가 최근에는 보고 있는 groovy와 비교해보면 왜 이렇게 어렵고 복잡하게 코딩을 해야 하는가 하는 생각이 자주 듭니다. groovy뿐 아니라 ruby, python과 같은 다른언어와 비교해봐도 참 어렵게 코딩을 해야 하는 구나. 하는 생각이 많이 들죠..

대표적인 경우가 jdbc코딩입니다. 아래 코드는 실제 같은 결과를 출력하는 코드입니다.

# Java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "fromm0", "1111");
            stmt = con.createStatement();
            rs = stmt.executeQuery("select * from test");
            while (rs.next()) {
                System.out.println(rs.getLong(1) + " " + rs.getString(2));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
            } catch (Exception e) {
            }
            try {
                stmt.close();
            } catch (Exception e) {
            }
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
}

# groovy
import groovy.sql.Sql
class GroovySqlExample1{
  static void main(args) {
    def sql = groovy.sql.Sql.newInstance("jdbc:mysql://127.0.0.1:3306/test", "fromm0", "1111", "com.mysql.jdbc.Driver")
    sql.eachRow("select * from test"){ println it.id + " " + it.name }
  }
}

혹시나 저랑 다르게 생각하시는 분이 있으신지..?? ^^

'자바' 카테고리의 다른 글

[일상] 일요일 위키에 추가한 내용  (0) 2008.12.21
[개발] Java와 Groovy 함께 사용하기  (0) 2008.12.21
[JDK] JDK 7의 변경사항  (4) 2008.12.20
[REST] jersey로 REST구현하기  (2) 2008.12.16
[eclipse] 시작시 에러  (4) 2008.11.23
Posted by fromm0
|

[JDK] JDK 7의 변경사항

자바 2008. 12. 20. 22:59
아직도 1.5버전을 사용하는 개발자가 많은데 JDK 7 에 대해서는 많은 부분이 진행중입니다.
저도 최근에서야 JDK 6을 사용하고 있는데 말이죠.

Devoxx 컨퍼런스에서 JDK에 변경사항에 대한 설문조사를 진행한 것으로 보입니다.
간단히 살펴보도록 하겠습니다.

# Map for-each
  • 현재
Map<String, Integer> map = new HashMap<String, Integer>();
for (Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

  • JDK 7
Map<String,Integer> map = new HashMap<String, Integer>();
for (String key, Integer value : map) {
    System.out.println(key + "=" + value);
}

차이점이 보이시나요..? 전 큰 잇점을 모르겠네요. ^^


# For-each iteration control

  • 현재
List<String> list = new ArrayList<String>();
for (String str : list) {
    if (str.length() > 100) {
        // str변수에 할당된 문자열을 제거하고자 한다.
    }
}

  • JDK 7
List<String> list = new ArrayList<String>();
for (String str : list : it) {
    if (str.length() > 100) {
        it.remove();
    }
}

좀더 간단하게 할수 있도록 도와주는 것 같기는 하지만..


# List/map access

  • 현재
List<String> list = ...
Map<String,Integer> map = ...
Map<String,Map<String,Task>> combined = ...

String str = list.get(0);
list.set(0, "Hi");

Integer value = map.get(str);
map.put("Hi", 56);

Task task = combined.get("Test").get("Monitor");
  • JDK 7
List<String> list = ...
Map<String,Job> map = ...
Map<String,Map<String,Task>> combined = ...

String str = list[0];
list[0] = "Hi";

Integer value = map[str];
map["Hi"] = 56;

Task task = combined["Test"]["Monitor"];

get메서드 대신에 일종에 배열처럼 또는 다른언어에서 제공하는 것처럼 지원하고자 하나 봅니다.


# Infer generics in declarations

  • 현재
List<String> list = new ArrayList<String>();
Map<String,Job> map = new HashMap<String,Job>();
Map<String,Map<Channel,Job>> map = new HashMap<String,<Channel,Job>>();
  • JDK 7
List<String> list = new ArrayList<>();
Map<String,Job> map = new HashMap<>();
Map<String,Map<Channel,Job>> map = new HashMap<>();

실제 객체를 생성하는 부분에서 제네릭 타입을 명시하지 않는다면 선언부의 값을 그대로 사용한다는 것입니다.


# Multi-catch of Exceptions

  • 현재
try {

} catch (IOException ex) {
} catch (SQLException ex) {
}
  • JDK 7
try {

} catch (IOException,SQLException ex) {
}

여러개의 예외처리보다는 한꺼번에 처리하고자 할때는 간단히 처리하기 위한 지원입니다.


# String switch

  • 현재
String str = ...
if (str.equals("name")) {
} else if (str.equals("surname")) {
} else if (str.equals("forename")) {
}

  • JDK 7
String str = ...
switch (str) {
    case "name":
        break;
    case "surname":
        break;
    case "forename":
        break;
}

이거보고 순간 멈찟 했는데 Java는 String타입에 대한 switch..case 구문을 지원하지 않고 이 부분에 대한 지원입니다.


# String interpolation

  • 현재
String name = ...
int value = ...
String out = "The value of "+ name + " is " + value;
  • JDK 7
String name = ...
int value = ...
String out = $"The value of ${name} is ${value}";

문자열 연산을 하면 아무래도 코드를 좀더 쉽게 처리할수도 있겠네요.


# Multi-line Strings
  • 현재
String sql =
"SELECT surname, forename, title " +
"FROM person";
  • JDK 7
String sql =
"""SELECT surname, forename, title
FROM person""";

groovy나 다른 많은 언어에서 지원하는 형태인데 Java에서도 가져오는군요.


# Resource management
  • 현재
File file = ...
FileReader in = null;
try {
    in = new FileReader(file);
    processFile(in);
} finally {
    try {
        if (in != null) {
            in.close();
        }
    } catch (IOException ignored) {}
}
  • JDK 7
File file = ...
try (FileReader in = new FileReader(file)) {
    processFile(in);
}

자원 해제에 대한 부담이 많이 줄어들듯 합니다.


# Null-handling
  • 현재
Session sess = ...
String code = null;
if (sess != null) {
    if (sess.person() != null) {
        if (sess.person().address() != null) {
            code = sess.person().address().postcode();
        }
    }
}
  • JDK 7
Session sess = ...
String code = sess?.person()?.address()?.postcode();

코드 전반에 걸쳐서 존재하는 많은 null 체크가 사라질수 있을듯 합니다.



상세한 결과물은 http://www.jroller.com/scolebourne/entry/jdk_7_language_changes_devoxx 에서 확인가능합니다. 결과만 보면 Infer generics in declarations, Multi-catch of Exceptions, Null-handling 에 대해서는 많은 점수를 주고 있습니다.

주의하셔야 할 것은 이 내용들이 모두 JDK 7에 반영되는 내용은 아닙니다. 설문조사니까 그래도 많은 부분이 반영은 되겠죠..??

참고자료
1. PPT : http://docs.google.com/Present?docid=ajkb8rnkwjk5_165g8wpxhf5
2. 설문조사 결과 페이지 : http://www.jroller.com/scolebourne/entry/jdk_7_language_changes_devoxx

Posted by fromm0
|