小编rad*_*tao的帖子

为什么Java 11基础Docker镜像如此之大?(的openjdk:11-JRE-苗条)

Java 11被宣布为最新的LTS版本.因此,我们正在尝试基于此Java版本启动新服务.

但是,Java 11的基本Docker镜像远大于Java 8的等效镜像:

(我只考虑每个Java版本的官方OpenJDK最轻量级的图像.)

更深入的挖掘发现了以下"事物":

  • openjdk:11-jre-slim图像使用基本图像debian:sid-slim.这带来了两个问题:

    • 这比60 MB大 alpine:3.8

    • Debian的sid版本是不稳定

  • openjdk-11-jre-headless安装在映像中的包比(运行Docker容器内部)大3倍openjdk8-jre:

所以,现在问题来了:

  • 为什么alpine不再使用Java 11 slim图像的基本映像?

  • 为什么不稳定的sid版本用于LTS Java图像?

  • 为什么OpenJDK 11的纤薄/无头/ JRE封装与类似的OpenJDK 8封装相比如此之大?

    • 什么是在OpenJDK 11中带来135 …

java docker alpine-linux java-11

107
推荐指数
3
解决办法
3万
查看次数

Java 11应用程序作为docker镜像

灵感来自问题为什么Java 11基础Docker镜像如此之大?(openjdk:11-jre-slim)我发现Java世界中的这个话题还没有解决.

至于07 Dec 2018存在共同的问题/陷阱(在上面的票证中讨论):

由于这些问题,即使是简洁的 Oracle Java 11基础映像也非常繁重,并且被认为是不稳定的:https://hub.docker.com/_/openjdk/

所以问题是:

什么是构建和提供Java 11应用程序作为docker镜像的优化推荐方法

java docker alpine-linux java-11

43
推荐指数
3
解决办法
1万
查看次数

Java"for"语句实现可防止垃圾回收

UPD 21.11.2017:该错误已在JDK中修复,请参阅Vicente Romero的评论

摘要:

如果for语句用于任何Iterable实现,则集合将保留在堆内存中直到当前作用域(方法,语句体)的结尾,并且即使您没有对集合和应用程序的任何其他引用也不会进行垃圾回收需要分配一个新的内存.

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8175883

https://bugs.openjdk.java.net/browse/JDK-8175883

例子:

如果我有下一个代码,它会分配一个包含随机内容的大字符串列表:

import java.util.ArrayList;
public class IteratorAndGc {

    // number of strings and the size of every string
    static final int N = 7500;

    public static void main(String[] args) {
        System.gc();

        gcInMethod();

        System.gc();
        showMemoryUsage("GC after the method body");

        ArrayList<String> strings2 = generateLargeStringsArray(N);
        showMemoryUsage("Third allocation outside the method is always successful");
    }

    // main testable method
    public static void gcInMethod() {

        showMemoryUsage("Before first memory allocating");
        ArrayList<String> strings …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection iterator for-loop memory-management

16
推荐指数
3
解决办法
2255
查看次数

为什么在kubernetes cron job中可能会创建两个作业,或者可能没有创建作业?

在k8s中,Cron Job Limitations提到无法保证作业只执行一次:

cron作业在其计划的每个执行时间创建一个作业对象.我们说"约",因为在某些情况下可能会创建两个作业,或者不会创建任何作业.我们试图使这些罕见,但不要完全阻止它们.因此,工作应该是幂等的

谁能解释一下:

  • 为什么会这样?
  • 这可能发生的概率/统计数据是什么?
  • 它将在k8s的某个合理的未来被修复吗?
  • 是否有任何变通办法来防止这种行为(如果正在运行的作业不能实现为幂等)?
  • 其他与cron相关的服务遭遇同样的问题吗?也许这是一个核心的cron问题?

cron jobs distributed-computing kubernetes

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

如何在 Spring Boot 应用程序中测试 Keycloak 身份验证?

Spring Boot项目中,我们启用了Spring Security并使用承载令牌应用 Keycloak 身份验证,如以下文章中所述:

https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/spring-security-adapter.html

https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/spring-boot-adapter.html

但是我找不到任何关于如何进行自动化测试以便应用 Keycloak 配置的建议。

那么,如何在启用 Spring 安全性的情况下测试/模拟/验证 Keycloak 配置?一件非常烦人的事情:默认情况下,Spring 会激活csrf安全过滤器,但如何避免对其进行测试?

(注意:我们使用不记名令牌,因此@WithMockUser在这种情况下似乎不适用)

奖金的问题:基本上我们不希望核实每个控制器集成测试的安全性,所以是有可能从控制器集成测试分别验证(那些使用安全@SpringBootTest@WebAppConfiguration@AutoConfigureMockMvc等?

security automated-tests spring-boot bearer-token keycloak

13
推荐指数
3
解决办法
1万
查看次数

是否可以在Ghostscript中为PDF中的每个页面添加水印

我转换PDF - >许多JPEG许多JPEG - >许多PDF使用ghostscript.我需要在每个转换的JPEG(PDF)页面上添加水印文本.是否可以只使用Ghostscript和PostScript?

我找到的唯一方法:

gswin32c -q -sDEVICE = pdfwrite -dBATCH -dNOPAUSE -sOutputFile = output.pdf watermark.ps input.pdf

但这将watermark.ps在第一个单独的页面上插入水印output.pdf.

我可以直接在输出PDF页面上执行此操作吗?

我可以直接在输出JPEG页面上执行此操作吗?

<<
   /BeginPage
   { gsave
       /Helvetica_Bold 120 selectfont
       .85 setgray 130 70 moveto 50 rotate (Sample) show
     grestore
   } bind
>> setpagedevice
Run Code Online (Sandbox Code Playgroud)

如果我使用/EndPage而不是/BeginPage- 它说不setpagedevice适用...

如何重新制作此脚本/EndPage

pdf jpeg watermark postscript ghostscript

8
推荐指数
2
解决办法
9882
查看次数

使用gradle依赖时如何排除多个组

就像这段代码:

dependencies {
    compile ('com.wdullaer:materialdatetimepicker:3.2.2') {
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'design'
    }
}
Run Code Online (Sandbox Code Playgroud)

在android应用程序build.gradle文件中,当我想依赖远程库时,如何使用排除组语法来排除多个组?

上面的代码虽然是正确的方法,但是有点复杂,有没有更简单的方法?

groovy gradle

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

为什么Deque(ArrayDeque)的容量是2的幂?

在Java中(但在PHP中类似),ArrayDeque实现的能力始终为2的幂:

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/ArrayDeque.java#l126

对于HashMap这种选择很明显-基于修剪的32位哈希具有均匀的元素分布。但是Deque顺序插入/删除元素。

同样,ArrayList不将其容量限制为2的幂,只是确保其至少为元素数量。

那么,为什么Deque实现要求其容量为2的幂

java capacity deque arraydeque

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

Gradle子项目依赖管理就像Maven中一样

Maven有一个功能,即依赖项版本管理可以集中在根/父项目中,并且当版本/范围/从父项目继承时,所有子模块/子项目仅指向依赖项名称。

Maven 依赖管理

gradle有一些标准方法吗?我找到了一些解决方法,例如Sprint Better Dependency Management for GradleHow to Centralize Support Libraries,但我真的很好奇是否gradle有一些内置的解决方案?

dependency-management gradle maven

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

AssertJ:containsOnly和containsExactlyInAnyOrder之间有什么区别

AbstractIterableAssert#containsOnly说:

验证实际组是否仅按任何顺序包含给定值而不包含任何其他值.

AbstractIterableAssert#containsExactlyInAnyOrder说:

验证实际组是否包含完全给定的值,而不是任何其他顺序.

描述看起来几乎一样,那么唯一确切的实际区别什么?

junit unit-testing assert list assertj

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