栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java进阶训练营第一周JVM预习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java进阶训练营第一周JVM预习笔记

1.JVM 基础知识:不积跬步,无以至千里

Java、C++、Rust 的区别 C/C++ 完全相信而且惯着程序员,让大家自行管理内存,可以编写很自由的代码,但一 不小心就会造成内存泄漏等问题,导致程序崩溃。 Java/Golang 完全不相信程序员,但也惯着程序员。所有的内存生命周期都由 JVM 运行 时统一管理。 在绝大部分场景下,你可以非常自由的写代码,而且不用关心内存到底是 什么情况。 内存使用有问题的时候,我们可以通过 JVM 来进行信息相关的分析诊断和 调整。 这也是本课程的目标。 Rust 语言选择既不相信程序员,也不惯着程序员。 让你在写代码的时候,必须清楚明白 的用 Rust 的规则管理好你的变量,好让机器能明白高效地分析和管理内存。 但是这样 会导致代码不利于人的理解,写代码很不自由,学习成本也很高

java进阶训练营 项目源码获取

SpuDetailVO spuDetailVO = new SpuDetailVO();
        CompletableFuture infoFuture = CompletableFuture.supplyAsync(() -> {
            Spu spu = this.baseMapper.selectById(id);
            spuDetailVO.setSpu(spu);
            return spu;
        }, executor);

        CompletableFuture skuFuture = CompletableFuture.runAsync(() -> {
            List skuList = skuMapper
                    .selectList(new QueryWrapper().eq("spu_id", id));
            spuDetailVO.setSkuList(skuList);
        }, executor);

        CompletableFuture imgFuture = infoFuture.thenAcceptAsync((res) -> {
            Long spuId = res.getId();
            List spuImgList = spuImgMapper
                    .selectList(new QueryWrapper().eq("spu_id", spuId));
            spuDetailVO.setSpuImgList(spuImgList);
        }, executor);
        CompletableFuture imgDetailFuture = infoFuture.thenAcceptAsync((res) -> {
            Long spuId = res.getId();
            List spuDetailImgList = spuDetailImgMapper
                    .selectList(new QueryWrapper().eq("spu_id", spuId));
            spuDetailVO.setSpuDetailImgList(spuDetailImgList);
        }, executor);

        try {
          CompletableFuture.allOf(infoFuture, skuFuture, imgFuture, imgDetailFuture).get();
        } catch (Exception e) {
          e.printStackTrace();
          log.error("线程异常:{}",e.getMessage());
        }
        return spuDetailVO;
    }

什么是字节码? Java bytecode 由单字节(byte)的指令组成,理论上最多支持 256 个操作码(opcode)。 实际上 Java 只使用了200左右的操作码, 还有一些操作码则保留给调试操作。 根据指令的性质,主要分为四个大类: 1. 栈操作指令,包括与局部变量交互的指令 2. 程序流程控制指令 3. 对象操作指令,包括方法调用指令 4. 算术运算以及类型转换指令

 

    @Override
    public List makeTree() {
        List categoryList = this.baseMapper.selectList(null);
        List collect = new ArrayList<>();
        for (Category category : categoryList) {
            if (category.getParentId() == 0) {
                category.setCategoryList(getChildren(category, categoryList));
                collect.add(category);
            }
        }
        return collect;

    }

    private List getChildren(Category root, List all) {
        List collect = new ArrayList<>();
        for (Category c : all) {
            if (c.getParentId().equals(root.getId())) {
                c.setCategoryList(getChildren(c, all));
                collect.add(c);
            }
        }
        return collect;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/975416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号