동시성 관련 좋은 링크가 있다.
http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/

stream을 배우고 parellal을 배우다보면 동시성 문제를 만난다.

두가지 해결 방법이 있다.

  1. atomic 클래스를 써서 쓰레드 세이프를 확보하는 방법
  2. reduce사용

IntStream의 sum 메서드를 타고 들어가면 reduce쓰는데 까지 나온다.

stream 방식은 reduce가 어울린다고 생각하지만 1,2 의 특성적 차이점이 뭔지 잘 모르겠다.

'Java' 카테고리의 다른 글

java bytecode  (0) 2018.04.01
Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09

jvm이 실제로 class를 어떤 식으로 실행하는 지 학인 할 수 있다.

자바소스를 java bytecode라는 것으로 보면 된다.

javap -c 클래스이름

을 실행하면 java bytecode가 나온다.

어셈블리어에 좀 더 가까운 코드를 볼 수 있다.


실무에서는 이런 식으로 확인하는 건 상당히 귀찮은 일이므로 ide에 플러그인을 깔면 편하다.

이클립스 같은 경우 현재 market place에서 설치하는 건 버전 호환때문에 에러 나는 분들이 많을 것이다.

install new software 를 이용해서 

http://andrei.gmxhome.de/eclipse/

주소를 적으면

여러 플러그인이 나오는데 이클립스 버전에 맞는 Bytecode Outline을 찾아서 설치하면 된다.

show view에서 Bytecode를 찾아서 창을 열면 

바로바로 전환되는 bytecode를 볼 수 있다.


속도 향상에 관심이 있다면 이걸로 코드를 비교해보면 좋다.


'Java' 카테고리의 다른 글

java concurrent와 stream(동시성 문제)  (0) 2018.04.01
Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09

Applet 실행하는데 보안상 위험한 곳에 접근 하려고 한다고 경로를 막 뱉으면서 버벅인다.


그러더니 에러가 발생


jackson으로 json컨버트 하는데서 에러가 발생했다.

access denied("java.lang.reflect.ReflectPermission" )


reflection이 파일로 접근하는 건줄 몰랐다.

reflection으로 함수형 프로그램을 흉내내도 실제 함수형 프로그램과는 멀다는 이야기네...


https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html

'Java' 카테고리의 다른 글

java concurrent와 stream(동시성 문제)  (0) 2018.04.01
java bytecode  (0) 2018.04.01
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09

Java Applet은 웹표준에서 사용 금지가 됐고

다들 쓰지 말라고 한다.


그런데 뭐 어떻하나

디바이스랑 연결 된 프로그램들이 applet으로 쓰게 되있다


앞으로 쓸일이 별로 없겠지만


역사 공부한다고 생각하고 하는 수 밖에...

'Java' 카테고리의 다른 글

java bytecode  (0) 2018.04.01
Java Applet ReflectPermission  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09
자바 자체 인증키 발급  (0) 2018.01.02

프로그램을 시작한지 얼마 안됐을 때 누구나 DB에서 resultSet을 받아서 int로 받으려는데 에러가 나서 골아픈 적이 있었을 것이다.

DB 타입은 number인데 왜 BigDecimal로 나오는 거지? 왜 이따구로 만들었을 까 정말 불편하다

라고 생각을 했다.


컴퓨터가 부동 소수점 연산을 잘 못한 다는 걸 알고 짜증난 적도 많다.

한국돈은 소수점이 나올 일이 없는데 달러는 소수점이 나온다.

가상화폐 거래소 만들면서 많이 느꼈다.

소수를 계속 정수로 만들어서 계산하고 나중에 다시 소수로 만들어주는 짜증나는 작업을 계속 했는데


BigDecimal이 소수 점 계산을 정확히 해준다.

그런데 정작 써봐도 똑같았다.

낚였다고 정말 욕을 많이 했는데

생성할 때 float나 double로 생성하면 안된다고 한다.

그냥 String으로 생성하거나 초기값을 스태틱 상수 Bigdecimal.ZERO로 쓰면 된다.


이런 걸 대부분 우연히 알아내게 된다는게 참 슬프다.

'Java' 카테고리의 다른 글

Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
autoclose resource : try-with-resource  (0) 2018.03.09
자바 자체 인증키 발급  (0) 2018.01.02
final 변수 설정을 하는 이유  (0) 2017.12.21

java6 까지

close가 필요한 자원을 프로시져 종료전에 꼭 닫으려면 finally를 써야 했다.


FileWriter writer = null;

try {
	writer = new FileWriter(file);
	writer.write("contents");
} catch (Exception e) {
	// TODO: handle exception
}finally {
	try {
		writer.close();
	} catch (IOException e) {
		// TODO handle exception
		e.printStackTrace();
	}
}


try catch 블럭도 혐오스러운데 finally 까지 붙이니 정말 보기 싫다.

스코프때문에 변수를 null로 선언해야 하는 꼴보기 싫음까지 추가로...

close를 하려면 거기도 예외처리를 해줘야 해서 또 try-catch 블럭을 넣어야 한다.

물론 메서드에서 쓰로우해주는게 좋다.


java7 부터는 많은 부분을 개선해 줬다.

try-with-resources 방식을 쓰면 한결 낫다.


try(FileWriter writer = new FileWriter(file); ) {
	
	file.write();
}


try 블럭이 끝나면 file 자원을 자동으로 close해준다.


'Java' 카테고리의 다른 글

Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
자바 자체 인증키 발급  (0) 2018.01.02
final 변수 설정을 하는 이유  (0) 2017.12.21

keytool -genkey -alias tomcat -keyalg RSA

'Java' 카테고리의 다른 글

Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09
final 변수 설정을 하는 이유  (0) 2017.12.21

단순히 프로그램내에서 변경되지 않길 바라는 변수에 final을 쓴다고만 알고 있었다.


실제로 개발을 할 때 그렇게 쓰기도 했지만 굳이 안써도 문제되는 상황은 없었다.


그런데 lambda를 공부하면서 익명 메서드를 넘기면서

final 변수가 강제로 필요하게 됐고.

왜 만들어 논지 알게 됐다.


자바 입문할 때 익명 클래스 만들 때 그냥 안되니까 final을 썼던 기억이 난다.

그때는 왜 안되는지 따지기에는 너무 어려워 보였었다.

'Java' 카테고리의 다른 글

Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09
자바 자체 인증키 발급  (0) 2018.01.02

+ Recent posts