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进阶训练营第一周JVM预习笔记_第1张图片

什么是字节码? 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;
    }
 
 

你可能感兴趣的:(java资源,java进阶学习,java,开发语言,面试)