最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot?3.x?GraalVM原生鏡像構(gòu)建內(nèi)存溢出問題解決方案

 更新時(shí)間:2026年01月16日 11:37:51   作者:深山技術(shù)宅  
文章解析了Spring?Boot?3.x與GraalVM?Native?Image構(gòu)建過程中出現(xiàn)的內(nèi)存溢出問題,從問題概述、根本原因、診斷工具、解決方案到高級(jí)調(diào)優(yōu)技巧和應(yīng)急解決方案,全面覆蓋了構(gòu)建優(yōu)化的各個(gè)方面,本文給大家介紹的非常詳細(xì),感興趣的朋友一起學(xué)習(xí)下吧

Spring Boot 3.x GraalVM原生鏡像構(gòu)建內(nèi)存溢出問題深度解析

一、問題概述與根本原因

1.1 內(nèi)存溢出典型錯(cuò)誤

Error: Image build request failed with exit status 137
# 或
Fatal error: java.lang.OutOfMemoryError
# 或
[pool-1-thread-1] GC Warning: Repeated allocation of very large block

1.2 根本原因分析

GraalVM Native Image構(gòu)建過程分為三個(gè)階段:

  1. 分析階段 - 執(zhí)行靜態(tài)分析,識(shí)別可達(dá)代碼
  2. 構(gòu)建階段 - 編譯為本機(jī)代碼
  3. 鏈接階段 - 生成可執(zhí)行文件

內(nèi)存溢出主要發(fā)生在分析階段,原因包括:

  • 大型Spring Boot應(yīng)用依賴過多
  • 反射、資源、代理等元數(shù)據(jù)過多
  • 堆外內(nèi)存(Native Memory)使用不當(dāng)
  • GraalVM配置不當(dāng)

二、診斷工具與監(jiān)控方法

2.1 構(gòu)建時(shí)內(nèi)存監(jiān)控

# 啟用詳細(xì)GC日志
mvn -Pnative clean package \
  -Dnative.buildArgs="-H:+PrintGC -H:+PrintGCTimeStamps" \
  -Dverbose=true
# 使用JMX監(jiān)控(需要JDK工具)
export NATIVE_BUILDTOOLS_MONITOR=true
./mvnw -Pnative clean package

2.2 分析內(nèi)存使用模式

# 查看內(nèi)存峰值
/usr/bin/time -v ./mvnw -Pnative clean package 2>&1 | grep -i "maximum"
# 使用系統(tǒng)監(jiān)控工具
top -pid $(pgrep -f "native-image")
# 或
htop -p $(pgrep -f "native-image")

2.3 生成內(nèi)存分析報(bào)告

<!-- pom.xml配置 -->
<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <configuration>
        <buildArgs>
            <buildArg>-H:+DashboardAll</buildArg>
            <buildArg>-H:DashboardDump=build/reports/native/dump</buildArg>
            <buildArg>-H:+DashboardHeap</buildArg>
            <buildArg>-H:+DashboardCode</buildArg>
        </buildArgs>
    </configuration>
</plugin>

三、解決方案:分層次優(yōu)化策略

3.1 第一層:基礎(chǔ)JVM堆內(nèi)存優(yōu)化

3.1.1 Maven配置優(yōu)化
<!-- 調(diào)整Maven/構(gòu)建工具JVM參數(shù) -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>-Xmx8g -Xms4g -XX:MaxDirectMemorySize=2g</argLine>
    </configuration>
</plugin>
<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <configuration>
        <jvmArgs>
            <!-- 為native-image進(jìn)程設(shè)置JVM參數(shù) -->
            <jvmArg>-Xmx12g</jvmArg>
            <jvmArg>-Xms6g</jvmArg>
            <jvmArg>-XX:MaxDirectMemorySize=4g</jvmArg>
            <jvmArg>-XX:+UseG1GC</jvmArg>
            <jvmArg>-XX:+UseStringDeduplication</jvmArg>
        </jvmArgs>
    </configuration>
</plugin>
3.1.2 環(huán)境變量配置
# Linux/Mac
export MAVEN_OPTS="-Xmx12g -Xms4g -XX:MaxMetaspaceSize=2g -XX:+UseG1GC"
export GRAALVM_HOME=/path/to/graalvm
# Windows
set MAVEN_OPTS=-Xmx12g -Xms4g -XX:MaxMetaspaceSize=2g -XX:+UseG1GC
set GRAALVM_HOME=C:\path\to\graalvm

3.2 第二層:GraalVM Native Image參數(shù)優(yōu)化

3.2.1 關(guān)鍵內(nèi)存參數(shù)
<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <configuration>
        <buildArgs>
            <!-- 堆內(nèi)存設(shè)置 -->
            <buildArg>-J-Xmx16g</buildArg>  <!-- native-image進(jìn)程最大堆 -->
            <buildArg>-J-Xms8g</buildArg>   <!-- native-image進(jìn)程初始堆 -->
            <!-- 并行處理優(yōu)化 -->
            <buildArg>-H:NumberOfThreads=4</buildArg> <!-- 根據(jù)CPU核心調(diào)整 -->
            <buildArg>-H:Parallelism=4</buildArg>
            <!-- 內(nèi)存使用策略 -->
            <buildArg>-H:MaximumHeapSizePercent=80</buildArg>
            <buildArg>-H:MaximumCompilationTime=90</buildArg>
            <!-- 大頁(yè)面支持(Linux) -->
            <buildArg>-H:+UseLargePages</buildArg>
            <buildArg>-H:LargePageSizeInBytes=2M</buildArg>
            <!-- 啟用壓縮指針 -->
            <buildArg>-H:+UseCompressedOops</buildArg>
        </buildArgs>
    </configuration>
</plugin>
3.2.2 分段構(gòu)建策略
<buildArgs>
    <!-- 啟用分層編譯 -->
    <buildArg>-H:-MultiTierAOT</buildArg>
    <!-- 增量構(gòu)建支持 -->
    <buildArg>-H:±UseExperimentalIncrementalBuild</buildArg>
    <!-- 模塊化構(gòu)建 -->
    <buildArg>-H:±BuildOutputSilent</buildArg>
    <buildArg>-H:TraceBuilder=modules</buildArg>
</buildArgs>

3.3 第三層:應(yīng)用級(jí)優(yōu)化

3.3.1 減少反射配置負(fù)載
// 優(yōu)化前:全量反射配置
@RegisterReflectionForBinding({
    Class1.class, Class2.class, Class3.class, 
    Class4.class, Class5.class, Class6.class,
    // ... 數(shù)百個(gè)類
})
// 優(yōu)化后:精確配置,僅包含必要字段/方法
@RegisterReflectionForBinding(
    value = {UserDTO.class, PageResult.class},
    mode = RegisterReflectionForBinding.Mode.SELECTIVE
)
public class OptimizedReflectionConfig {
    @Bean
    @RegisterReflectionForBinding(
        value = ComplexDTO.class,
        fields = {"id", "name", "createdAt"}, // 僅注冊(cè)必要字段
        methods = {"getId", "getName"}        // 僅注冊(cè)必要方法
    )
    public Service service() {
        return new Service();
    }
}
3.3.2 延遲初始化策略
@Configuration
@NativeHint(
    options = {
        // 關(guān)鍵:將非必要的庫(kù)延遲初始化
        "--initialize-at-run-time=" +
            "com.fasterxml.jackson.databind," +
            "org.hibernate.validator," +
            "ch.qos.logback," +
            "io.netty",
        // 構(gòu)建時(shí)必須初始化的核心類
        "--initialize-at-build-time=" +
            "org.springframework," +
            "com.example.core"
    },
    trigger = NativeHintTrigger.class
)
public class LazyInitializationConfig {
    // 動(dòng)態(tài)配置初始化時(shí)間
    @Bean
    @ConditionalOnNativeImage
    public RuntimeHintsRegistrar runtimeHintsRegistrar() {
        return hints -> {
            // 運(yùn)行時(shí)才需要反射的類
            hints.reflection().registerType(
                DynamicProxyClass.class,
                MemberCategory.PUBLIC_CLASSES
            );
            // 延遲加載的資源
            hints.resources().registerPattern("dynamic/*.json");
        };
    }
}
3.3.3 模塊化應(yīng)用設(shè)計(jì)
// 1. 創(chuàng)建核心模塊(必須構(gòu)建時(shí)初始化)
@NativeHint(
    options = "--initialize-at-build-time=com.example.core"
)
@Configuration
public class CoreModuleConfig {
    // 核心業(yè)務(wù)邏輯,最小化依賴
}
// 2. 創(chuàng)建擴(kuò)展模塊(可以運(yùn)行時(shí)加載)
@NativeHint(
    options = "--initialize-at-run-time=com.example.plugin",
    mode = NativeHintMode.REFLECTION_AND_RESOURCES
)
@Configuration
@ConditionalOnProperty(name = "plugin.enabled")
public class PluginModuleConfig {
    // 可選功能,按需加載
}
// 3. 主應(yīng)用配置
@SpringBootApplication
@Import({CoreModuleConfig.class})
public class ModularApplication {
    @Bean
    @ConditionalOnNativeImage
    public static RuntimeHintsRegistrar moduleRegistrar() {
        return hints -> {
            // 動(dòng)態(tài)注冊(cè)模塊
            if (isPluginEnabled()) {
                hints.reflection().registerType(
                    PluginService.class,
                    MemberCategory.INVOKE_PUBLIC_METHODS
                );
            }
        };
    }
}

3.4 第四層:基礎(chǔ)設(shè)施優(yōu)化

3.4.1 Docker構(gòu)建優(yōu)化
# 多階段構(gòu)建,優(yōu)化內(nèi)存使用
FROM ghcr.io/graalvm/native-image:22.3.1 AS builder
# 設(shè)置構(gòu)建參數(shù)
ENV MAVEN_OPTS="-Xmx8g -Xms4g -XX:MaxMetaspaceSize=1g"
ENV NATIVE_IMAGE_OPTS="-J-Xmx12g -J-Xms6g -H:MaximumHeapSizePercent=80"
# 使用ZGC(JDK17+)
ENV JAVA_TOOL_OPTIONS="-XX:+UseZGC -Xmx10g -Xms5g"
# 構(gòu)建緩存優(yōu)化
VOLUME /root/.m2
VOLUME /root/.gradle
# 構(gòu)建腳本
COPY . /app
WORKDIR /app
# 分步構(gòu)建,減少單次內(nèi)存壓力
RUN ./mvnw clean compile -DskipTests
RUN ./mvnw package -Pnative -DskipTests \
    -Dspring.aot.enabled=true \
    -Dnative.buildArgs="$NATIVE_IMAGE_OPTS"
# 最終鏡像
FROM alpine:latest
COPY --from=builder /app/target/*-runner /application
ENTRYPOINT ["/application"]
3.4.2 CI/CD流水線優(yōu)化
# GitHub Actions配置
jobs:
  build-native:
    runs-on: ubuntu-22.04-large  # 使用大內(nèi)存實(shí)例
    env:
      MAVEN_OPTS: "-Xmx12g -Xms6g -XX:MaxMetaspaceSize=2g"
      GRAALVM_OPTS: "-J-Xmx14g -J-Xms8g"
    steps:
    - name: Setup GraalVM
      uses: graalvm/setup-graalvm@v1
      with:
        version: '22.3.1'
        java-version: '17'
        components: 'native-image'
        native-image-job-reports: 'true'
    - name: Build with memory optimization
      run: |
        # 分段構(gòu)建策略
        mvn clean compile -DskipTests -T 4
        mvn package -Pnative -DskipTests \
          -Dnative.buildArgs="
            -J-Xmx14g
            -J-Xms8g
            -H:NumberOfThreads=4
            -H:Parallelism=4
            -H:MaximumHeapSizePercent=75
            -H:+PrintGC
            -H:+PrintGCTimeStamps
            -H:+HeapDumpOnOutOfMemoryError
            -H:HeapDumpPath=./heapdump.hprof
          "
    - name: Upload memory report
      if: failure()
      uses: actions/upload-artifact@v3
      with:
        name: native-build-reports
        path: |
          heapdump.hprof
          target/*.json
          target/reports/

四、高級(jí)調(diào)優(yōu)技巧

4.1 分析階段內(nèi)存分解優(yōu)化

<buildArgs>
    <!-- 控制分析范圍 -->
    <buildArg>-H:AnalysisMaxNodes=1000000</buildArg> <!-- 限制分析節(jié)點(diǎn)數(shù) -->
    <buildArg>-H:AnalysisRootsScope=app</buildArg>   <!-- 限制分析根范圍 -->
    <!-- 內(nèi)存使用策略 -->
    <buildArg>-H:AnalysisTimeFile=analysis-time.json</buildArg>
    <buildArg>-H:+AnalysisResultAsGraph</buildArg>
    <!-- 去除不需要的分析 -->
    <buildArg>-H:-AnalysisTime</buildArg>
    <buildArg>-H:-PrintAnalysisCallTree</buildArg>
</buildArgs>

4.2 使用Profile-Guided Optimization (PGO)

# 第一步:生成profiling信息
java -Dspring.aot.enabled=true \
     -agentlib:native-image-agent=config-output-dir=./config,\
     caller-filter-file=./filter.json,\
     builtin-caller-filter=true \
     -jar target/application.jar
# 運(yùn)行典型工作負(fù)載
# 第二步:使用PGO構(gòu)建
mvn -Pnative package \
  -Dnative.buildArgs="
    -J-Xmx16g
    -H:ProfileFile=./config/profile.iprof
    -H:+ProfileGuidedOptimization
    -H:PGOInstrTimeFile=./config/pgo-time.txt
  "

4.3 依賴項(xiàng)精細(xì)化控制

// 使用@ConditionalOnClass避免不必要的類加載
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(name = {
    "com.fasterxml.jackson.databind.ObjectMapper",
    "org.springframework.http.converter.json.Jackson2ObjectMapperBuilder"
})
@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class OptimizedJacksonConfig {
    // 僅當(dāng)Jackson存在時(shí)才配置
}
// 使用@ImportRuntimeHints進(jìn)行提示注冊(cè)
@ImportRuntimeHints(OptimizedHintsRegistrar.class)
@Configuration
public class OptimizedConfiguration {
    static class OptimizedHintsRegistrar implements RuntimeHintsRegistrar {
        @Override
        public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
            // 動(dòng)態(tài)計(jì)算需要注冊(cè)的類
            if (isFeatureEnabled("feature-x")) {
                hints.reflection().registerType(FeatureX.class);
            }
        }
    }
}

五、應(yīng)急解決方案

5.1 當(dāng)內(nèi)存極度受限時(shí)(<8GB RAM)

<configuration>
    <buildArgs>
        <!-- 極端內(nèi)存優(yōu)化配置 -->
        <buildArg>-J-Xmx4g</buildArg>
        <buildArg>-J-Xms2g</buildArg>
        <buildArg>-J-XX:MaxDirectMemorySize=512m</buildArg>
        <buildArg>-J-XX:+UseSerialGC</buildArg>  <!-- 串行GC,減少內(nèi)存開銷 -->
        <buildArg>-H:NumberOfThreads=2</buildArg> <!-- 減少線程數(shù) -->
        <buildArg>-H:MaximumHeapSizePercent=60</buildArg>
        <buildArg>-H:MaximumCompilationTime=95</buildArg>
        <!-- 禁用非必要特性 -->
        <buildArg>-H:-AddAllCharsets</buildArg>
        <buildArg>-H:-EnableURLProtocols</buildArg>
        <buildArg>-H:-AddAllFileSystemProviders</Arg>
        <!-- 簡(jiǎn)化分析 -->
        <buildArg>-H:AnalysisMaxNodes=500000</buildArg>
        <buildArg>-H:-CollectAnalysisResults</buildArg>
    </buildArgs>
</configuration>

5.2 使用云構(gòu)建服務(wù)

# 使用Google Cloud Build
gcloud builds submit --config=cloudbuild.yaml \
  --machine-type=e2-highcpu-32 \
  --disk-size=200
# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/maven'
  args: ['package', '-Pnative', '-DskipTests']
  env:
    - 'MAVEN_OPTS=-Xmx30g -Xms16g'
    - 'NATIVE_IMAGE_OPTS=-J-Xmx32g'

六、監(jiān)控與驗(yàn)證

6.1 構(gòu)建性能監(jiān)控腳本

#!/bin/bash
# monitor-native-build.sh
set -e
START_TIME=$(date +%s)
MEMORY_LIMIT=16000  # 16GB in MB
echo "開始Native Image構(gòu)建監(jiān)控..."
echo "內(nèi)存限制: ${MEMORY_LIMIT}MB"
echo "時(shí)間: $(date)"
# 監(jiān)控內(nèi)存使用
monitor_memory() {
    local pid=$1
    local max_mem=0
    while kill -0 $pid 2>/dev/null; do
        local mem=$(ps -o rss= -p $pid | awk '{print int($1/1024)}')
        if [ $mem -gt $max_mem ]; then
            max_mem=$mem
        fi
        if [ $mem -gt $MEMORY_LIMIT ]; then
            echo "錯(cuò)誤: 內(nèi)存使用超過限制 (${mem}MB > ${MEMORY_LIMIT}MB)"
            kill -9 $pid
            exit 1
        fi
        sleep 5
    done
    echo "最大內(nèi)存使用: ${max_mem}MB"
}
# 執(zhí)行構(gòu)建
mvn -Pnative clean package \
  -Dnative.buildArgs="-J-Xmx${MEMORY_LIMIT}m -H:+PrintGC -H:+PrintGCTimeStamps" \
  -DskipTests &
BUILD_PID=$!
# 啟動(dòng)監(jiān)控
monitor_memory $BUILD_PID
# 等待構(gòu)建完成
wait $BUILD_PID
BUILD_STATUS=$?
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo "構(gòu)建時(shí)長(zhǎng): ${DURATION}秒"
echo "結(jié)束時(shí)間: $(date)"
exit $BUILD_STATUS

6.2 構(gòu)建成功后的驗(yàn)證

@SpringBootTest
@DisabledOnNativeImage  // 不在Native測(cè)試中運(yùn)行
class NativeImageMemoryTest {
    @Test
    void verifyNativeImageConfiguration() {
        // 驗(yàn)證反射配置是否完整
        assertDoesNotThrow(() -> 
            Class.forName("com.example.dto.UserDTO")
                 .getDeclaredMethod("getId")
        );
        // 驗(yàn)證資源文件
        assertNotNull(getClass().getResource("/META-INF/native-image/resource-config.json"));
        // 內(nèi)存使用檢查
        Runtime runtime = Runtime.getRuntime();
        long usedMemory = runtime.totalMemory() - runtime.freeMemory();
        long maxMemory = runtime.maxMemory();
        assertTrue(usedMemory < maxMemory * 0.8, 
            "內(nèi)存使用應(yīng)小于最大內(nèi)存的80%");
    }
    @Test
    @ConditionalOnNativeImage
    void nativeImageSpecificTest() {
        // Native鏡像特有的測(cè)試
        assertTrue(ImageInfo.inImageCode(), "應(yīng)在Native Image中運(yùn)行");
    }
}

七、最佳實(shí)踐總結(jié)

7.1 構(gòu)建環(huán)境建議

  1. 內(nèi)存配置:至少16GB RAM,推薦32GB
  2. 存儲(chǔ)配置:SSD硬盤,至少20GB空閑空間
  3. CPU配置:4核以上,支持并行編譯

7.2 應(yīng)用設(shè)計(jì)原則

  1. 模塊化:按功能拆分,獨(dú)立構(gòu)建
  2. 懶加載:盡可能使用運(yùn)行時(shí)初始化
  3. 精簡(jiǎn)依賴:移除不必要的庫(kù)
  4. 精確配置:避免全量反射/資源注冊(cè)

7.3 持續(xù)優(yōu)化流程

通過上述系統(tǒng)化的優(yōu)化策略,可以顯著降低GraalVM Native Image構(gòu)建時(shí)的內(nèi)存需求,提高構(gòu)建成功率。關(guān)鍵是根據(jù)實(shí)際應(yīng)用規(guī)模和可用資源,選擇合適的優(yōu)化組合策略。

到此這篇關(guān)于Spring Boot 3.x GraalVM原生鏡像構(gòu)建內(nèi)存溢出問題深度解析的文章就介紹到這了,更多相關(guān)springboot GraalVM原生鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問定位詳解

    深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問定位詳解

    這篇文章主要介紹了深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問定位,結(jié)合實(shí)例形式詳細(xì)分析了Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問定位相關(guān)概念、原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 關(guān)于Mybatis動(dòng)態(tài)sql中test的坑點(diǎn)總結(jié)

    關(guān)于Mybatis動(dòng)態(tài)sql中test的坑點(diǎn)總結(jié)

    這篇文章主要介紹了關(guān)于Mybatis動(dòng)態(tài)sql中test的坑點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java多線程中的Interrupt簡(jiǎn)析

    Java多線程中的Interrupt簡(jiǎn)析

    這篇文章主要介紹了Java多線程中的Interrupt簡(jiǎn)析,Interrupt 的其作用是"中斷"線程, 但實(shí)際上線程仍會(huì)繼續(xù)運(yùn)行, 這是一個(gè)非常容易混淆的概念,Interrupt 的真正作用是給線程對(duì)象設(shè)置一個(gè)中斷標(biāo)記, 并不會(huì)影響線程的正常運(yùn)行,需要的朋友可以參考下
    2023-09-09
  • Spring整合Mybatis的全過程

    Spring整合Mybatis的全過程

    這篇文章主要介紹了Spring整合Mybatis的全過程,包括spring配置文件書寫映射器接口的實(shí)例代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • Java算法之重新排列數(shù)組例題

    Java算法之重新排列數(shù)組例題

    這篇文章主要介紹了Java算法之重新排列數(shù)組例題,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • 詳談Enumeration接口和Iterator接口的區(qū)別

    詳談Enumeration接口和Iterator接口的區(qū)別

    下面小編就為大家?guī)硪黄斦凟numeration接口和Iterator接口的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 圖解JVM內(nèi)存模型

    圖解JVM內(nèi)存模型

    這篇文章主要介紹了JVM內(nèi)存模型的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī),感興趣的朋友可以了解詳細(xì)
    2020-10-10
  • Spring Cloud Zuul路由網(wǎng)關(guān)服務(wù)過濾實(shí)現(xiàn)代碼

    Spring Cloud Zuul路由網(wǎng)關(guān)服務(wù)過濾實(shí)現(xiàn)代碼

    這篇文章主要介紹了Spring Cloud Zuul路由網(wǎng)關(guān)服務(wù)過濾實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 解釋:int型默認(rèn)值為0的問題

    解釋:int型默認(rèn)值為0的問題

    這篇文章主要介紹了解釋:int型默認(rèn)值為0的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java的垃圾強(qiáng)制回收實(shí)例分析

    Java的垃圾強(qiáng)制回收實(shí)例分析

    這篇文章主要介紹了Java的垃圾強(qiáng)制回收,結(jié)合實(shí)例形式分析了java垃圾強(qiáng)制回收的相關(guān)原理及實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

吴江市| 安塞县| 平山县| 漳浦县| 水富县| 广丰县| 城固县| 宜宾县| 闵行区| 进贤县| 龙陵县| 托里县| 宜章县| 若尔盖县| 潍坊市| 安岳县| 仲巴县| 云林县| 积石山| 深州市| 景东| 辽中县| 搜索| 盖州市| 铁力市| 榆树市| 玉龙| 曲靖市| 定安县| 沾益县| 仁化县| 合肥市| 出国| 遵义县| 锦屏县| 沁阳市| 漳浦县| 孟连| 和平县| 庆元县| 六枝特区|