亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

到處使用 DTO 會影響 jvm 上的內存使用嗎?

到處使用 DTO 會影響 jvm 上的內存使用嗎?

喵喵時光機 2021-10-28 09:55:07
所以我的問題是在我的項目中,我在我的服務類中使用模型映射器。因此,當服務調用 Dao 層(實際上只是一個 JPA Repository 接口)時,Dao 層現在成功返回實體而不是僅返回實際實體,我首先將其轉換為 DTO(這是實體的精確副本)使用java的模型映射器。因為我不想直接公開我的實體。代碼示例:public class FormService {    @Autowired    private FormMasterDao formMasterDao;    @Autowired    private ModelMapper mapper;    public FormMasterDTO save(FormMasterDTO formMasterDTO) {        FormMaster formMaster = buildFormMaster(formMasterDTO);        return convertToFormMasterDTO(formMasterDao.save(formMaster));    }    public List<FormMasterDTO> findById(String id) {        return formMasterDao.findByIdIn(id)                .stream()                .map(this::convertToFormMasterDTO)                .collect(toList());    }    public void updateAll(List<FormMasterDTO> formMasterDTOList) {        formMasterDao.saveAll(formMasterDTOList.stream()                .map(this::convertToFormMaster)                .collect(toList()));    }    public FormMasterDTO update(FormMasterDTO formMasterDTO) {        return convertToFormMasterDTO(formMasterDao.save(convertToFormMaster(formMasterDTO)));    }    private FormMasterDTO convertToFormMasterDTO(FormMaster formMaster) {        return mapper.map(formMaster, FormMasterDTO.class);    }    private FormMaster convertToFormMaster(FormMasterDTO formMasterDTO) {        return mapper.map(formMasterDTO, FormMaster.class);    }}我發現這種方法很有用,因為如果許多開發人員工作和編寫代碼,他們就不能直接使用實體。但我想知道,使用這種方法是否不好?會,它會影響 JVM,因為每次有人點擊服務時,我都會將其轉換為 DTO。
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

如果您擔心從純 JPA 對象轉換為 DTO 的時間成本,那么請不要擔心。這是為什么。

與許多其他操作相比,對象分配確實很慢,但與 IO 相比一點也不慢。我確信您的 JPA 服務會從數據庫中獲取一些東西。如果我是對的,那么突然間您花在新對象分配上的時間(以及以后產生的 GC 成本)將少于您花在 DB 操作本身上的時間的 0.01%。

如果您針對速度進行了優化,減少內存分配是一個好主意,但到目前為止,這應該不是您要做的第一件事。只有在優化成本更高的操作(例如數據庫查詢)之后才有意義。

免責聲明: 在某些情況下,您的 DTO 會被證明是昂貴的。如果您碰巧在 JPA 對象中使用延遲加載,那么您即將進行的 DTO 轉換將完全擊敗它。延遲加載將允許 JPA不獲取JPA 對象圖的某些子元素,但作為 DTO 轉換的一部分,您每次都會請求“可選”數據,這反過來會使您回到開始使用Lazy.


查看完整回答
反對 回復 2021-10-28
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號