小编Val*_* K.的帖子

Kotlin/Native 垃圾收集器如何在 C 中工作?

我在JetBrains FAQ 中找到了对 Kotlin/Native 内存管理模型的一些解释。

答:Kotlin/Native 提供了一种自动化的内存管理方案,类似于 Java 或 Swift 提供的方案。当前的实现包括一个自动引用计数器和一个循环收集器来收集循环垃圾。

我或多或少了解它在 Java 或 Kotlin (JVM) 中的工作原理。任何人都可以详细描述如何在使用 C 的项目中在 Kotlin/Native 中管理内存?

另外,如果有垃圾收集器,为什么我们需要 Kotlin/Native 函数 memScoped { }?

另外,我在这里找到

Kotlin/Native 是一种将 Kotlin 编译为无需任何 VM 即可运行的原生二进制文件的技术。从广义上讲,Native 代码是任何内存不由底层框架管理而必须由程序员自己管理的代码。即没有垃圾收集。例如 C++ 的删除和 C 的免费

我认为这与 JetBrains 常见问题解答中的内容相矛盾

c garbage-collection kotlin-native

12
推荐指数
1
解决办法
2550
查看次数

AWS Batch 作业在计算环境中以 Min vCPUs=0 启动时间过长

我正在使用 AWS Batch。提交作业后,我等待 10-15 分钟,直到我的作业进入 RUNNING 状态。我的计算环境配置是下一个:

配置模型:EC2
实例类型:m4.xlarge

最小 vCPU:0
所需 vCPU:0
最大 vCPU:4

ECR 图像大小 ~130 MB。

我了解 Min vCPUs = 0 中的问题。启动 ECS 实例需要一些时间。但是为什么这么长??为了加快我的作业运行速度,我运行了虚拟作业,它可以长时间保持 ECS 实例处于运行状态。在那之后,我的工作运行得很快。

amazon-ec2 amazon-web-services amazon-ecs aws-batch

5
推荐指数
1
解决办法
2399
查看次数

无法获得 local 和 utc Instant

我需要以秒为单位获取本地时间和 UTC 时间。我在 StackOverflow 中阅读了一些帖子并找到了一些解决方案,正如前面提到的那样:

    Instant time = Instant.now();
    OffsetDateTime utc = time.atOffset(ZoneOffset.UTC);
    int utcTime = (int) utc.toEpochSecond();
    int localTime = (int) time.getEpochSecond();
    System.out.println("utc " + utcTime + " local " + localTime);
Run Code Online (Sandbox Code Playgroud)

但结果并不是我所期望的。现在是UTC时间。输出:

utc   1593762925
local 1593762925
Run Code Online (Sandbox Code Playgroud)

调试后我发现 Instant.now() 已经是 utc。我找不到如何在当前时区(即我的系统区域)中获取时间。

我在 API 中找到了一些解决方案,但出现错误:

OffsetDateTime utc = time.atOffset(ZoneOffset.of(ZoneOffset.systemDefault().getId()));
Run Code Online (Sandbox Code Playgroud)

线程“main”中的异常 java.time.DateTimeException:ZoneOffset 的 ID 无效,格式无效:Europe/Astrakhan 在 java.base/java.time.ZoneOffset.of(ZoneOffset.java:241)

UPD:我的问题是如何在本地时区和 UTC 中以秒为单位获取当前时间?即自 1970-01-01T00:00:00 GMT+4 和 1970-01-01T00:00:00 GMT+0 以来的秒数

UPD2:我有一些设备需要从 1970 年开始以秒为单位的 UTC 时间和以秒为单位的发件人本地时间响应。为什么?我不知道。对我来说是黑匣子。

java timezone-offset

5
推荐指数
1
解决办法
259
查看次数

Kotlin 中的并发 Future 语法

我为 Future 使用简单的 java 代码:

Future<Integer> futureTask = executor.submit(() -> {
    System.out.println("I'm Callable task.");
    return 1 + 1;
});
Run Code Online (Sandbox Code Playgroud)

当我将它粘贴到 kotlin 类时,它会转换为:

val futureTask = executor.submit {
    println("I'm Callable task.")
    1 + 1
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试获取 Java 类中的值时,我得到的是 null 而不是 number

val integ = futureTask.get()
Run Code Online (Sandbox Code Playgroud)

当我在java代码中编写return时,我的ide警告这里不允许return。

接下来是完整的 kotlin 代码:

fun main(args: Array<String>) {
   val executor = Executors.newSingleThreadExecutor()
   val futureTask = executor.submit {
       println("I'm Callable task.")
       1 + 1
   }

   println(futureTask.get())
   executor.shutdown() }
Run Code Online (Sandbox Code Playgroud)

输出:

I'm Callable task.
null
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法Future

kotlin completable-future

4
推荐指数
1
解决办法
1596
查看次数

如何格式化具有多个占位符和一个值的字符串

我有一个可以更改的字符串模板,并且只有一个值我想插入到所有占位符中。例如:

String str = "He%s%so, wor%sd";
String value = "L";
Run Code Online (Sandbox Code Playgroud)

我知道我下一步可以做:

String.format(str, value, value, value);
Run Code Online (Sandbox Code Playgroud)

但是如果这个字符串发生了变化,我如何在不更改代码的情况下格式化它呢?

java string-formatting

4
推荐指数
1
解决办法
1313
查看次数

没有 Spring 应用的 Spring 重试

我有一个java应用程序,它从主类(不是Spring boot应用程序)开始。我想使用 Spring retry 在连接丢失时重试。据我所知,我需要在 Spring 应用程序中的主类上方添加 @EnableRetry 注释,然后在我的方法上方使用 @Retryable 进行重试。但我认为它在非 spring 应用程序中不起作用。是否可以在简单的java应用程序(不是spring应用程序)中使用spring重试?

java spring-retry

2
推荐指数
1
解决办法
2953
查看次数

如何使用 Spring Boot Gradle Plugin 2.1.* 构建不可执行的 jar(库)

我正在尝试建立一个图书馆。我的 build.gradle 文件中有 Spring Boot Gradle 插件:

plugins {
id 'org.springframework.boot' version '2.1.3.RELEASE'
}
Run Code Online (Sandbox Code Playgroud)

我的图书馆没有主班。为了防止“未配置主类...”错误,我添加到 build.gradle:

bootRepackage {
enabled = false
}
Run Code Online (Sandbox Code Playgroud)

但出现错误:

评估根项目“mysuperlibrary”时出现问题。

在 org.gradle.api.Project 类型的根项目“mysuperlibrary”上找不到参数 [build_3886uiniuyuorta9lpa9n4f5c$_run_closure3@1975ec48] 的方法 bootRepackage()。

在 Spring boot Gradle Plugin 1.5.16 上一切正常,但不适用于 2.1.3。

更新:我使用这个插件是因为没有它我无法解析 testCompile 'org.springframework.boot:spring-boot-starter-test' 。当我删除插件时,我可以为测试构建项目位依赖项消失。

java gradle build.gradle spring-boot spring-boot-gradle-plugin

1
推荐指数
1
解决办法
2009
查看次数

无法访问 build.gradle UPD 中的 gitlab-ci 环境变量:使用 kaniko 时

我想获取 gitlab 环境变量并在 build.gradle 脚本中使用它。我在gitlab-ci中定义了变量:

 build:
  stage: build
  variables:
    TEST: "HELLO WORLD"
  script:
    - export
Run Code Online (Sandbox Code Playgroud)

另外,我使用 -export 命令来打印所有变量。我在 gitlab 作业控制台中看到了我的 TEST 变量。但是当我试图在 build.gradle 中获取这个变量时,它是空的。这是build.gradle代码片段:

    if (System.getenv('TEST') != null) {
    repositories {
        println 'CI=' + System.getenv('CI')
        println 'M- ' + System.getenv('MAVEN_REPO_USER')
        println 'T- ' + System.getenv('TEST')
        println 'CI_JOB_STAGE ' + System.getenv('CI_JOB_STAGE')
        mavenCentral()
    }
} else {
    repositories {
        println '*CI= ' + System.getenv('CI')
        println '*MAven ' + System.getenv('MAVEN_REPO_USER')
        println '* ' + System.getenv('CI_JOB_STAGE')
        println 'T-+++ ' + System.getenv('TEST')
        mavenCentral()
        mavenLocal()
    } …
Run Code Online (Sandbox Code Playgroud)

environment-variables gradle gitlab gitlab-ci

1
推荐指数
1
解决办法
2292
查看次数