【Java外部内存API实战宝典】:彻底掌握高性能内存管理核心技术

Java全栈面试进阶宝典 希望看到这篇文章的小伙伴都能抓住金三银四的小尾巴,拿到自己想要的Offer! 阅读详情

第一章:Java外部内存API概述

Java 外部内存 API(Foreign Memory API)是 Project Panama 的核心组成部分,旨在提供一种安全、高效的方式来访问 JVM 堆外的本地内存。该 API 弥补了传统 `ByteBuffer` 和 `sun.misc.Unsafe` 在管理堆外内存时的安全性与易用性缺陷,使开发者能够直接操作操作系统级别的内存资源,同时保持 Java 的内存安全特性。

设计目标与核心概念

外部内存 API 的主要设计目标包括:
  • 提供对堆外内存的类型化和非类型化访问能力
  • 支持细粒度的内存生命周期管理,避免内存泄漏
  • 与现有的 JNI 和本地库无缝集成
  • 保证线程安全和内存访问边界检查
关键接口如 `MemorySegment` 和 `MemoryAddress` 构成了 API 的基础。其中,`MemorySegment` 表示一段可访问的本地内存区域,具备明确的生命周期控制机制;`MemoryLayout` 则用于描述内存结构的布局,便于解析复杂的本地数据结构。

基本使用示例

以下代码展示如何分配并写入 100 字节的本地内存:

// 分配 100 字节的本地内存段
MemorySegment segment = MemorySegment.allocateNative(100);

// 向偏移量为 0 的位置写入一个 int 值(4 字节)
segment.set(ValueLayout.JAVA_INT, 0, 42);

// 从相同位置读取值
int value = segment.get(ValueLayout.JAVA_INT, 0);
System.out.println(value); // 输出: 42

// 手动关闭内存段以释放资源
segment.close();
上述代码中,`set` 和 `get` 方法通过指定偏移量和数据类型进行内存读写,确保类型安全。`close()` 调用显式释放底层内存,防止资源泄露。

内存访问模式对比

方式安全性性能适用场景
ByteBuffer + Direct中等高简单堆外缓冲
sun.misc.Unsafe低极高底层框架开发
外部内存 API高高现代本地内存交互

第二章:外部内存基础与核心概念

2.1 外部内存模型与JVM堆外空间原理

Java 应用在处理大规模数据或高性能I/O时,常面临JVM堆内存的局限性。为突破这一瓶颈,堆外内存(Off-Heap Memory)成为关键解决方案。它通过直接在操作系统内存中分配空间,绕过JVM垃圾回收机制,显著降低GC停顿时间。
堆外内存的分配与管理
使用 `java.nio.ByteBuffer.allocateDirect()` 可创建直接缓冲区:

ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024); // 分配1MB堆外内存
buffer.putInt(42);
buffer.flip();
该代码分配1MB堆外空间,适用于NIO通道传输。`allocateDirect` 调用底层系统函数(如 mmap),内存不受GC控制,需谨慎管理以避免泄漏。
堆外内存的优势与代价
  • 减少GC压力:大对象不占用堆空间
  • 提升I/O性能:与本地I/O操作直接交互
  • 增加复杂性:手动生命周期管理易引发内存泄漏
合理使用堆外内存,可在高吞吐场景下实现性能跃升。

2.2 MemorySegment与MemoryLayout基本使用

内存访问基础
`MemorySegment` 表示一段连续的本地内存,可通过 `MemoryLayout` 描述其结构。创建堆外内存段示例如下:

MemorySegment segment = MemorySegment.allocateNative(16);
segment.set(ValueLayout.JAVA_INT, 0, 42);
int value = segment.get(ValueLayout.JAVA_INT, 0);
上述代码分配16字节本地内存,并在偏移0处写入整型值42。`ValueLayout.JAVA_INT` 指定数据类型和大小(4字节),`set` 和 `get` 方法基于偏移量进行读写。
结构化内存布局
`MemoryLayout` 支持组合结构,如 `StructLayout` 可定义字段顺序:
字段偏移类型
id0int
name4long
该布局可用于解析复杂二进制协议或映射C结构体,提升内存操作安全性与可维护性。

2.3 资源生命周期管理与清理机制

在分布式系统中,资源的创建、使用和释放必须遵循严格的生命周期管理策略,以避免内存泄漏与句柄耗尽。
自动清理机制设计
通过引用计数与垃圾回收结合的方式,系统可自动识别闲置资源。例如,在Go语言中可通过sync.Pool缓存临时对象:
var resourcePool = sync.Pool{
    New: func() interface{} {
        return new(Resource)
    },
}
上述代码定义了一个资源池,New函数用于初始化新资源。每次获取对象时调用resourcePool.Get(),使用完毕后调用Put()归还,有效减少GC压力。
清理策略对比
  • 手动释放:依赖开发者调用,易出错但控制精细
  • 延迟清理:通过定时任务周期性扫描过期资源
  • 事件驱动:基于资源状态变更触发自动回收

2.4 对比传统ByteBuffer的性能优势

内存管理效率提升
Netty的ByteBuf采用池化和引用计数机制,显著减少GC压力。相比JDK原生ByteBuffer,避免了频繁的对象创建与销毁。
零拷贝支持
通过复合缓冲区(CompositeByteBuf)实现逻辑合并,无需数据复制:

CompositeByteBuf composite = Unpooled.compositeBuffer();
composite.addComponent(true, buf1);
composite.addComponent(true, buf2);
参数`true`表示自动释放组件缓冲区,减少手动管理开销,提升I/O聚合效率。
  • 传统ByteBuffer:每次合并需申请新空间并复制数据
  • ByteBuf:通过视图组合实现零拷贝,降低CPU消耗

2.5 安全访问外部内存的最佳实践

在嵌入式系统中,安全访问外部存储器是保障系统稳定与数据完整的关键环节。直接操作外部内存易引发数据竞争、越界访问等问题,因此需引入严格的访问控制机制。
使用边界检查的指针封装
通过封装对外部内存的访问接口,可有效防止非法读写:

typedef struct {
    uint8_t *base_addr;
    size_t   size;
} ext_memory_t;

bool safe_write(ext_memory_t *mem, size_t offset, uint8_t data) {
    if (offset >= mem->size) return false; // 边界检查
    *(mem->base_addr + offset) = data;
    return true;
}
该函数在写入前校验偏移量是否超出分配范围,避免越界操作。`base_addr` 指向外部内存起始地址,`size` 记录合法区域大小。
推荐实践清单
  • 始终验证内存映射区域的权限配置
  • 启用MPU(内存保护单元)限制访问区域
  • 对共享资源使用原子操作或互斥锁

第三章:关键API深入解析

3.1 MemorySegment的创建与访问模式

MemorySegment的创建方式
在Java Foreign Function & Memory API中,MemorySegment可通过堆内或堆外内存创建。常用方法包括MemorySegment.allocateNative()和MemorySegment.ofArray()。

// 创建1024字节的本地内存段
MemorySegment segment = MemorySegment.allocateNative(1024, ResourceScope.global());

// 基于Java数组创建堆内存段
int[] data = {1, 2, 3};
MemorySegment arraySegment = MemorySegment.ofArray(data);
上述代码中,allocateNative分配堆外内存,适合长时间运行的数据;ofArray则直接包装现有数组,避免额外拷贝。
访问模式与数据读写
MemorySegment支持类型化访问,通过get和set方法按偏移量读写数据。
  • get(ValueLayout.OfInt, offset):从指定偏移读取int值
  • set(ValueLayout.OfInt, offset, value):写入int值
例如:

segment.set(ValueLayout.JAVA_INT, 0, 42); // 在偏移0处写入42
int value = segment.get(ValueLayout.JAVA_INT, 0); // 读取值
该机制确保内存访问安全且高效,结合ValueLayout实现类型精确控制。

3.2 MemoryLayout的结构化内存描述技巧

在系统编程中,精确控制内存布局对性能优化至关重要。`MemoryLayout` 提供了一种类型安全的方式来描述复合数据结构的内存排布。
字段对齐与偏移计算
通过显式定义字段偏移量,可避免编译器自动填充带来的空间浪费:
type Header struct {
    Version uint8  // offset: 0
    Length  uint32 // offset: 4 (需对齐到4字节)
    Flags   uint16 // offset: 8
}
该结构总大小为10字节,但因 `uint32` 对齐要求,实际占用12字节。使用 `MemoryLayout` 可手动压缩布局,提升缓存命中率。
运行时内存视图映射
  • 支持跨平台字节序适配
  • 实现零拷贝协议解析
  • 提供类型安全的内存别名访问

3.3 ValueLayout与序列化数据交互实战

在处理跨平台数据交换时,ValueLayout 提供了内存布局的精确控制能力,尤其适用于与序列化协议(如 FlatBuffers、Cap'n Proto)协同工作。
定义对齐的数据视图
通过 ValueLayout 可显式指定字段偏移和对齐方式,确保序列化字节流与目标架构兼容:

ValueLayout.Structured layout = ValueLayout.structOf(
    ValueLayout.JAVA_INT.withName("id"),
    ValueLayout.JAVA_DOUBLE.withName("price")
).withByteAlignment(8);
上述代码构建了一个按 8 字节对齐的结构体布局,id 占前 4 字节,price 紧随其后,总大小为 16 字节。这种精确控制避免了因填充字节导致的反序列化错位。
与序列化框架集成
使用该布局解析二进制数据时,结合 MemorySegment 可直接映射字段:
  • 调用 layout.varHandle(int.class) 获取 id 的访问句柄
  • 通过 segment.get(handle, offset) 安全读取值
  • 保证无 GC 开销的同时维持类型安全

第四章:高性能场景下的应用实践

4.1 操作系统本地库调用(JNI替代方案)

在跨平台应用开发中,Java Native Interface(JNI)虽能实现Java与本地代码交互,但存在复杂性和可维护性问题。近年来,操作系统级本地库调用成为更高效的替代方案。
直接系统调用机制
通过语言内置的外部函数接口(FFI),如Rust的extern或Go的CGO,可直接绑定操作系统原生库函数,避免JNI的中间层开销。

package main

/*
#include <stdio.h>
void hello() {
    printf("Hello from C\n");
}
*/
import "C"

func main() {
    C.hello()
}
上述Go代码通过CGO调用C标准库函数。import "C"启用CGO,注释中C代码被编译为本地共享库,C.hello()实现直接调用,无需额外JNI声明与加载流程。
性能与安全权衡
  • 减少上下文切换:避免JVM与本地代码间复杂的参数转换
  • 内存控制更直接:可精确管理生命周期,但也需手动防范内存泄漏
  • 跨平台兼容性依赖构建系统支持,需预编译多平台库

4.2 零拷贝文件与网络I/O处理实例

传统I/O的瓶颈
在传统文件传输中,数据需经历多次内核空间与用户空间之间的拷贝。例如,从磁盘读取文件后通过Socket发送,通常涉及四次上下文切换和四次数据拷贝,严重影响性能。
零拷贝技术实现
Linux提供了sendfile()系统调用,可在内核态直接将文件数据传递至套接字,避免用户空间中转。

#include <sys/sendfile.h>

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
参数说明: - in_fd:源文件描述符(如打开的文件); - out_fd:目标描述符(如Socket); - offset:文件起始偏移; - count:传输字节数。 该调用将数据从文件描述符直接送入网络协议栈,仅需两次上下文切换和一次DMA拷贝,显著提升吞吐量。
应用场景对比
方式上下文切换次数数据拷贝次数
传统 read/write44
sendfile22(含1次DMA)

4.3 大规模数据处理中的内存池设计

在高并发与大数据量场景下,频繁的内存分配与回收会显著影响系统性能。内存池通过预分配固定大小的内存块并重复利用,有效减少GC压力,提升内存访问效率。
内存池核心结构
典型的内存池由空闲链表、内存块管理器和线程本地缓存组成。每个内存块大小对齐,便于快速分配与回收。
参数说明
block_size单个内存块大小,通常为2的幂次
pool_capacity池中最大可容纳块数
代码实现示例

typedef struct {
    void *blocks;
    size_t block_size;
    int free_list[1024];
    int top;
} MemoryPool;
该结构体定义了一个基础内存池,blocks指向连续内存区域,free_list维护可用索引栈,top指示栈顶位置,实现O(1)分配与释放。

4.4 多线程环境下外部内存的并发控制

在多线程程序中访问外部内存(如堆外内存或共享内存)时,数据竞争和不一致状态是主要挑战。为确保线程安全,必须引入并发控制机制。
锁机制与原子操作
使用互斥锁(Mutex)可防止多个线程同时修改共享资源。例如,在C++中通过std::mutex保护外部内存写入:

std::mutex mtx;
void writeExternalMemory(void* addr, int data) {
    mtx.lock();
    *(int*)addr = data;  // 安全写入
    mtx.unlock();
}
该代码确保任意时刻只有一个线程能执行写操作,避免脏读和写覆盖。
内存屏障与可见性保障
处理器和编译器可能重排指令,导致内存更新延迟对其他线程可见。插入内存屏障可强制同步:
  • Acquire屏障:确保后续读写不被重排到当前指令前
  • Release屏障:保证此前的读写对其他线程立即可见
结合原子变量的Release-Acquire语义,可在无锁结构中实现高效同步。

第五章:未来展望与生态演进

随着云原生技术的持续演进,Kubernetes 已成为构建现代应用平台的核心基础设施。其生态系统正朝着更轻量化、模块化和智能化方向发展。
服务网格的深度集成
Istio 与 Linkerd 等服务网格项目正在简化流量管理与安全策略的实施。例如,在 Istio 中通过以下配置可实现金丝雀发布:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
    - reviews
  http:
    - route:
      - destination:
          host: reviews
          subset: v1
        weight: 90
      - destination:
          host: reviews
          subset: v2
        weight: 10
该机制已在某金融科技公司的微服务架构中落地,显著降低了发布风险。
边缘计算场景下的 K8s 扩展
K3s 和 KubeEdge 等轻量级发行版使得 Kubernetes 能够运行在资源受限的边缘节点。某智能制造企业部署 K3s 集群于工厂产线设备,实现对 PLC 控制器的统一调度与远程更新。
  • 边缘节点自动注册至中心控制平面
  • 通过 CRD 定义设备固件升级策略
  • 利用本地存储卷缓存传感器数据
AI 驱动的运维自动化
Prometheus 结合机器学习模型可实现异常检测的前移。某电商平台将历史监控数据输入 LSTM 模型,预测 Pod 资源需求趋势,并触发 HorizontalPodAutoscaler 的自定义指标扩缩容。
指标类型采集频率响应延迟
CPU 使用率15s< 30s
请求 P99 延迟10s< 20s
监控面板示意图
2025年Java架构师面试宝典 【代码】2025年Java架构师面试宝典。 阅读详情

相关推荐

Java面试宝典:九阴真经

多态是OOP的又一个核心概念,它允许以统一的方式处理不同的对象类型。多态性主要通过方法重载和方法重写来实现,是运行时多态的基础,也是接口和抽象类的关键支撑点。在上面的示例中,Animal是一个接口,Dog和Cat是实现了Animal接口的类。Zoo类中的方法接受Animal类型的参数,无论传递给它的参数是Dog还是Cat对象,都会调用相应对象的makeSound方法,体现了多态的特性。

weixin_42604188的博客 580

java知识总结——java平台与内存管理

java知识总结——java平台与内存管理说明一、java是平台独立语言二、java平台与其他语言三、JVM加载class文件的原理机制四、GC(垃圾回收)五、java中的内存泄漏六、java中的堆和栈的区别 说明   本文仅仅为了博主面试时方便查阅与梳理相关知识,如果有错误与不到位的地方,欢迎大佬指点改正,谢谢!   阅读书籍:《java程序员面试笔试宝典》 一、java是平台独立语言   1、...

花开花落 花满楼的博客 263

Java API文档与对象引用深入解析

本文深入探讨了Java API文档的使用以及对象引用的概念。通过API文档,Java程序员能够快速查找并利用Java库中的类和方法,而对象引用则解释了Java中变量是如何引用对象的。文章还提供了关于图形应用程序开发的简要介绍。

weixin_42311427的博客 433

6月成功定级阿里P7,多亏啃完了这上百页的Java高频核心面试宝典

6月份,我不自量力的面试了某里的 Java 开发岗位,迎面走来一位风尘仆仆的中年男子,手里拿着屏幕还亮着的 Mac。他冲着我礼貌的笑了笑,然后说了句“不好意思,让你久等了”,然后示意我坐下,说:“我们开始吧,看了你的简历,觉得你对 Redis 应该掌握的不错,我们今天就来讨论下 Redis……”。我想:“来就来,兵来将挡水来土掩”。 Redis 是什么 面试官:你先来说下 Redis 是什么吧! 我:(这不就是总结下 Redis 的定义和特点嘛)Redis 是 C 语言开发的一个开源的(遵...

文章中资料均可获取,有需要请添加yunduoa2019即可 2629

YOLO26算法皮革表面缺陷检测+训练好的模型+124张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[颜色(color), 切(cut), 折叠(fold), 胶水(glue), 好的(good), 戳(poke)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 68 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.7582** mAP50-95 | 0.4306 Precision | 0.6226 Recall | 0.6520 train/box_loss | 0.8731 train/cls_loss | 2.3543 val/box_loss | 1.3709 val/cls_loss | 3.9767 【训练过程分析】 从一开始的配置就定下了基调,训练配置包括了 yolo26n 模型、100 个 epoch,学习率初始设为 0.01,输入尺寸定为 640x640,批次大小为 24。这组配置在开始阶段表现得不错,模型刚开始训练时的 loss 降低得很快,这表明模型能够迅速从数据中吸收信息。但到了中后期,loss 曲线变得愈发平缓,从第 50 个 epoch 开始,即使我增加了学习率衰减的频率,仍然感到曲线在挣扎,像是陷入了平台期。这期间模型的收敛节奏明显减缓,似乎有些“停滞不前”的迹象。到了最后,模型确实收敛了,但在第 68 个 epoch 时 mAP50 获得了 0.7582 的值,这是一个不错的成绩,但与理想值相比仍有提升空间。... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

Java核心实操:内存溢出 实战、内存泄漏实战

实操1:使用JVisualVM分析内存溢出OOM,实操2:使用JVisualVM分析内存泄漏

架构师尼恩 4072

S32K3双核实战:手把手教你用EB配置CAN与CANFD(附中断/轮询代码对比)

本文详细解析了NXP S32K3双核处理器在CAN/CANFD通信开发中的实战应用。通过Elektrobit配置工具链,从双核通信架构设计到EB tresos Studio配置全流程,再到中断与轮询模式的代码实现对比,全面指导开发者优化S32K3 FlexCAN模块性能,提升汽车电子系统的通信效率与可靠性。

weixin_30955617的博客 440

2025 高级 Java 面试宝典 [特殊字符](先放题目后放答案)

掌握前沿技术,成为顶尖 Java 工程师。

真实的菜的博客 1711

Navcat最新版的激活和安装教程(全网最靠谱,最快捷的方式)

现在最新版本navcat已经出到了16.3了,并且新版navcat也支持连接redis和图标等更多样化的功能,但是比较头疼的一件事就是,只能试用14天。那么接下来小编教大家如何用最简单的方式使用最新版navcat16.

weixin_50737119的博客 2万+

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式 方法二】

关于荣耀手机安卓12如何解除进程限制,这里提供以下教程供小伙伴们参考。

Amy_mumu的博客 13万+

2022最新发布史上最强的《Java岗面试宝典》PDF版,拿走不谢

由于细节内容实在是太多了,只能把部分知识点里面的章节挑出来介绍一下,每个章节的小节点里面都有更详细的内容!以下就是部分知识点的目录,由于平台的篇幅限制原因,子节点上的详细讲解也无法全部展示,文末有货取以下章节的所有详细知识讲解。能这么快拿下多个大厂 offer 这全得益于一份堪称神级的 Java 面试宝典,非常不错 面试干货很多。小编也是本着雷锋精神在此分享出来,希望能帮助到更多的朋友。服务跟踪(starter-sleuth)服务熔断(Hystrix)基于 Redis 分布式锁。Netty RPC 实现。

aa119101的博客 3230

国产信创麒麟操作系统 (kylin v10 x86架构) 离线安装nginx步骤(亲测,超详细步骤)、修改nginx配置文件、启动、重启、关闭nginx记录(亲测有效)

国产信创麒麟操作系统 (kylin v10 x86架构) 离线安装nginx步骤(亲测,超详细步骤)、修改nginx配置文件、启动、重启、关闭nginx记录(亲测有效)

qq445829096的博客 2767

Java程序员面试宝典

1.JVM ClassLoader在JVM运行时加载java核心的API,以满足java程序最基本的需求 包括: ExtClassLoader,用来java的扩展API,即/lib/ext中的类 AppClassLoader,用户机器上CLASSPATH设置目录中的类 一些重要的方法: loadClass: 是 ClassLoader的入口点,接受两个参数,String name

楚门的世界 1271

【25届数字IC秋招总结】面试经验6——经纬恒润

25届数字ic面试记录——经纬恒润

lalala0635的博客 991

STM32CubeMX配置FSMC驱动外部SRAM全流程详解

FSMC(灵活静态存储控制器)是STM32实现高速并行外部存储扩展的核心外设,其本质是将片外SRAM地址空间映射为CPU可直接读写的内存区域。原理上依赖于精确的时序寄存器配置(如BTRx)、GPIO复用功能启用及AHB3总线时钟同步机制,技术价值在于免DMA搬运的零拷贝访问能力与确定性低延迟。典型应用场景包括工业HMI缓存、医疗设备实时数据采集、嵌入式图形加速等对带宽和确定性要求严苛的系统。本文围绕STM32F407ZG平台,结合STM32CubeMX工程化配置、硬件信号完整性设计与HAL库底层映射逻辑,系

weixin_34718952的博客 232

java 面试宝典

1.类的加载过程: 一个类的加载到执行总共两个过程,编译和执行,编译就是把我们的java文件编译成.class字节码文件,执行就是把.class加载进内存并解析生成对象的过程 主要阶段有5个 加载 连接 初始化 使用 销毁 加载 通过类加载器(双亲委派机制)将class文件加载到内存中去 连接 分为 验证 准备 解析三个阶段 验证就是验证字节码是否符合文件规范(文件格式,元数据,字节码,符号引用),准备阶段主要是为变量分配内存并赋初值,解析就是将常量池的符号引用替换为直接引用 初始化 执行类构造

qq_27081015的博客 1520

基于STM32+华为云设计的智慧农业灌溉系统(2023升级版)(158)

本项目设计一种基于STM32的智慧农业监测系统。该系统能够检测空气温度、湿度、光强度和土壤湿度等关键指标,并自动调节浇水量,实现作物生长环境的精细化管理。同时,本项目还支持本地LCD屏幕数据显示和通过ESP8266上传数据到华为云物联网平台,同时搭建流媒体服务器实现摄像头远程监控。最重要的是,本项目将利用Qt开发Android手机APP,使用户可以远程查看监测情况,了解农作物生成情况。

1万+

Java基础——Java平台与内存管理

参考Java程序员面试笔试宝典: 1.为什么说Java是平台独立性语言 平台独立性指的是在一个平台上编写和编译的程序,可在其他平台上运行。 保证Java具有平台独立性的机制是“中间码”和“Java虚拟机(JVM)“ Java程序被编译后生成一个”中间码“,不同硬件平台会装有不同JVM,负责把中间码翻译成硬件平台可以执行的代码。因此JVM不具有平台独立性,而是与硬件平台相关。 解释执行分三...

chs_502的博客 222

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java 程序员面试笔试宝典 第 4 章 Java 基础知识:4.8 Java 平台与内存管理

4.8.1 为什么说 Java 是平台独立性语言 平台独立性是指可以在一个平台上编写和编译程序,而在其他平台上运行。保证 Java 具有平台独立性的机制为「中间码」和「Java 虚拟机(Java Virtual Machine,JVM)」。Java 程序被编译后不是生成能在硬件平台上可执行的代码,而是生成了一个「中间码」。不同的硬件平台上会安装有不同的 JVM,由 JVM 来负责把「中间码」翻译...

Marlon康 516

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java面试宝典

参见:http://fjding.iteye.com/blog/2319515 http://www.360doc.com/content/16/0216/00/26211242_534899333.shtml J2SE基础  1. 九种基本数据类型的大小,以及他们的封装类。  Long(64),Integer(32),Short(16),Double(64),Float(32),

nameix的博客 1085

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JAVA面试宝典(纯享版)--JVM篇

JVM(Java Virtual Machine)即Java虚拟机,是Java语言的解释执行引擎。它是一种抽象的计算机器,具有指令集并管理其自己的内存空间。JVM屏蔽了底层操作系统的差异,使得Java程序可以在不同的平台上运行,只要该平台安装了JVM。JVM的引入实现了“一次编写,到处运行”(Write Once, Run Anywhere)的承诺。

技术驱动,分享互联网软件的那些事儿。关注我,获取有深度、有温度的技术内容,开启你的技术之旅。 1044

在阿里巴巴内网找到的一份《Java核心宝典》简直太细了,如获至宝!

前言: 之前有看过很多的Java知识点资料,但是很多资料都是零零散散的并且不全面,像这样一整份PDF文档,分知识点整理好的资料并不多了,所以我觉得我是捡到宝了,所以特意分享给大家,需要的人可以自取,个人觉得很受用,这个自己判断要不要吧! 目录 1.Jvm 2.Java合集 3.Java多线程并发 4.Java基础 5.spring原理 6.微服务 7.NETTY与RPC 8.网络 9.日志 10.zookeeper 11.Kafka 12.RabbitMQ 13.Hbase 14.Mongo.

JavaBUGa的博客 156

复习这份美团架构师的Java核心面试宝典,我四面阿里拿下offer

他是如何拿下阿里等大厂的offer的呢,今天分享他的秘密武器,美团资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。由于整个文档比较全面,内容比较多,所以我分享的知识里面可能会有一些疏漏,与杂乱,整个核心知识点都是整理好的文档。添加图片注释,不超过 140 字(可选)

m0_63437643的博客 833

面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典

由于知识点比较全面,内容比较多,所以我将这些Java面试中的核心知识点汇总整理成了一份文档。文档已经上传到了百度云网盘,文末提供获取方式~

m0_69305074的博客 148

Java面试宝典带你复习--第一章基础篇

J2SE是基础,J2EE基于J2SE扩展企业级API(如EJB、JTA),J2ME针对资源受限设备简化API,后因移动互联网发展,J2ME逐渐被Android/iOS开发取代。通过以上深入拓展,覆盖Java基础的核心概念、常见面试考点及实战细节,帮助读者系统掌握基础知识,应对高频面试问题。1.19 List、Set、Collection、Collections区别。1.19 List、Set、Collection、Collections区别。1.2 J2SE、J2EE、J2ME三者区别。

weixin_48053866的博客 1343
上一篇: 为什么你的3D场景总是失控?Python视角矩阵调试全解析
下一篇: 揭秘Java虚拟线程真实性能:10组压测数据告诉你是否值得升级
FastProceed
博客等级 码龄1年 143粉丝 2005原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值