SrcFile
이라는 엔티티 클래스가 있고 해당 열 중 하나가 있습니다.왜이 코드는 느리고 느리게 실행됩니까?
@NotNull
@Lob
private Byte[] data;
이 SrcFile
에는 Report 엔티티와 OneToOne 관계가 있습니다.
Report.java에서 :
@OneToOne
private SrcFile srcFile;
SrcFile
엔터티를 유지하면 멋지게 작동합니다.
srcFileHomeFacade.clearInstance();
SrcFile srcFile = srcFileHomeFacade.getInstance();
byte[] bArray = resource.getBytesForSource();
srcFile.setData(ReportFileResource.toObject(bArray));
System.out.println("````````````````srcFile data length: "+bArray.length);
srcFileHomeFacade.persist();
Report
을 지속하면 문제가 발생합니다.
report.setSrcFile(srcFile);
reportHomeFacade.persist();
이 코드를 여러 번 실행하면 멋지지만 은 느려지고 느린 (심지어 GC 오버 헤드 오류가 발생 함)와 조사 시간 후이 report.setSrcFile(srcFile)
가 문제.
어쨌든 보고서는 srcFile.data
같은 양의 참조를 좋아하지 않습니다 ...
원인을 확인하십시오?
만약 내가 report.setSrcFile
모든 좋은 작품 (단, 보고서 테이블의 SRCFILE_ID는 null이 될 것입니다하지만 그것은 단지 테스트를위한 것입니다). 데이터의 길이는 약 100.000입니다.
참고 : report
을 유지하지 않고 srcFile
엔티티 만 유지하면 문제가 없습니다. 업데이트 :
"느리고 느리게 실행" 설명 :이 코드는 일부 pcl을 pdfs로 변환하기 위해 호출되므로 data
에는 pcl의 소스가 들어 있으며 매번 다른 경우가 있습니다. 약 100 pcls를 변환하면 프로세스가 느려지고 느려지 며 VM에서는 MB 메모리가 많이 필요한이 바이트 [] 배열을 발견했습니다. 다시 말하지만 IO에 대해서는 문제가 아니지만 보고서 엔티티에 대한 setSrcFile에 대해 VisualVM에서도이를 나타냅니다.
자바라고하기 때문에 : – ThiefMaster
@ThiefMaster : 매우 도움이됩니다.) – weltraumpirat
"여러 번 실행"이라고 할 때 다음과 같은 내용을 명심하십시오. 동일한 엔터티를 여러 번 유지합니까? 프로그램이 지속적이거나 데이터를 읽을 때만 느리게 실행됩니까? 데이터를 쓰는 동안 읽기 작업을 실행합니까? 동일한 보고서에 다른 파일을 설정합니까, 아니면 하나의 보고서에 대해 항상 동일한 srcFile입니까? CascadeTypes를 설정합니까? 게으른로드 나 열심히로드합니까? – weltraumpirat