草庐IT

java - 如何禁止 Java VM 在崩溃/将敏感数据写入磁盘时创建任何转储

我正在编写一个将敏感数据(密码和私钥)存储在内存中的Java程序。它将自由部署到任何操作系统。我知道用户几乎可以在任何系统上手动创建内存转储,但我担心操作系统或JVM实现创建的转储(包括但不限于JVM本身的某些段错误)会损害隐私敏感数据。是否可以采取任何措施来降低这些风险?Thisquestion是POSIX特定的,但给了我这些平台的答案。我有一个非平台特定的想法,包括将UncaughtExceptionHandler(likethis)设置为一个将覆盖敏感数据的类。但是如果内存被换出怎么办?如果JVM因JVM/JNI错误而崩溃(例如段错误)怎么办?我知道Linux可以阻止数据交换到磁

Java 8 元空间垃圾回收

我正在运行的一个Java进程在它运行的头一个小时左右一直表现良好。但是,性能会迅速下降。在分析时,我发现元空间垃圾收集发生得相当频繁,直到小时标记,然后就失去了控制:我很确定我可以使用-XX:MaxMetaspaceSize选项来解决这个问题。但是,我想更多地了解为什么会发生这种行为。我无法想象为什么垃圾收集算法会这样。有没有人对更好的解决方案有解释或建议?谢谢 最佳答案 您可以尝试设置-XX:MaxMetaspaceExpansion=0。这应该在尝试增加元空间之前强制执行完整的GC-释放动态创建的方法/类数据。此外,您可以尝试将

Java兼容编译模式

我面临以下难题。我目前正在32位和64位Windows机器上部署Java8应用程序。由于Java8即将结束,我开始面临下一步该做什么的非常困难的问题。由于Oracle不会提供其较新Java版本的32位版本,我现在必须坚持使用8,尽管通过转向OpenJDK的产品,他们似乎promise支持比8的EoL更远的产品。为此,我还将作为VM(提供32位版本)迁移到OpenJ9。我的问题如下。我开始考虑转向Java11。我想知道,是否可以使用该jdk以兼容模式编译并以版本8为目标,而不使用任何11的特定功能?另外,编译后的代码是否可以在这样的组合中正确运行,即Java11代码兼容编译并部署到32位

java - 为什么JVM在进入无限递归时不会崩溃?

我正在编写一个要加载到JVM中的共享库,但下面的行为让我卡住了。这是我的Java类:packagecom.test;publicclassUnixUtil{static{System.loadLibrary("myfancylibrary");}staticnativeintopenReadOnlyFd(Stringpath);staticnativeintcloseFd(intfd);}publicclassMain{publicstaticvoidmain(String[]args){intfd=UnixUtil.openReadOnlyFd("/tmp/testc");UnixU

java - JVM/CLR 源代码兼容语言选项

我有一个开源Java数据库迁移工具(http://www.liquibase.org),我正在考虑将其移植到.Net。该工具的大部分(至少从复杂性方面来说)是围绕逻辑的,例如“如果您要添加主键并且数据库是Oracle,请使用此SQL。如果数据库是MySQL,请使用此SQL。如果主键是命名并且数据库是Postgres使用此SQL”。我可以forkJava代码库并(手动和/或自动)隐藏它,但是随着对上述逻辑的更新和错误修复,我不想将它应用于两个版本。我想做的是将所有这些逻辑移动到一种可以被Java和.Net版本天真地编译和使用的形式。我要转换的代码不包含任何高级库使用(JDBC、Syste

java - 如何通过查看 gc 日志查看正在运行的垃圾收集器?

如何通过查看次要和主要收集的gc日志来了解正在运行的垃圾收集器(CMS、并行等)?我无权访问设置为java的命令行选项(appserver的sysadm不会让我看到它们)。我确实有相当详细的gc日志。 最佳答案 GC消息的确切格式取决于JVM版本和JVM设置。您可以在OracletutorialaboutGCtuning查看sample.DefNew是默认收集器。它是串行的还是并行的,选择哪一个取决于JVM版本/设置。您可以使用java-XX:+PrintCommandLineFlags-version查看JDK6中的默认设置。在我

java - 终结器(和 ReferenceQueue 的)是否在 JVM 终止时运行?

这个问题在这里已经有了答案:DoesJVM/GCcall`finalize()`onprogram/threadexit?(2个答案)关闭9年前。我知道youcan'tcountonfinalizers清理你的烂摊子(即免费资源),但我想知道-当JVM正常终止(System.exit()/没有剩余线程)时,java对象是否得到GC'ed/finalized?/p>编辑:因此,不能保证触发GC,因此finalize()也不能保证,但是ReferenceQueue会起作用吗?

九款常见的 JVM 垃圾回收器

JVM不仅是大厂面试的一个高频问题,也是Java程序员跨入高职级必须掌握的知识点,垃圾回收器作为JVM中核心的一环,了解它的原理,可以帮助我们更好地调优和故障排除,因此,今天我们就来聊聊JVM中9款常见的垃圾回收器。背景 因为Java虚拟机的类型比较多,如果没有特殊说明,本文特指HotSpot虚拟机,在分享回收器之前,我们首先对HotSpot虚拟机背景做个简单的介绍。HotSpotVM,最初是由“LongviewTechnologies”这家小公司设计,并且一开始也不是为Java语言研发。1997年,Sun公司收购了这家公司,从而也就得到了HotSpot虚拟机,在Sun公司的一番优化下,Hot

java - 为什么方法断点会对性能产生如此负面的影响?

为什么添加方法级断点会对Debug模式下的程序性能产生如此负面的影响?以下面的(有点做作的)例子为例:publicstaticvoidmain(String[]args){longstart=System.currentTimeMillis();for(inta=0;a这个的性能大概是:未调试:4.5秒调试,断点1:6.0秒调试,断点2:47.0秒这是怎么回事?方法级调试给我们带来了哪些普通方法无法提供的好处?谢谢!编辑时间只是近似值,包括我对断点使用react并继续应用程序所需的时间(看起来大约1秒左右)。我很欣赏System.currentTimeMillis()不是100%准确,

java - 如何向相邻jvm中的akka​​系统发送消息?

我在一个JVM中使用HelloActor启动了akka系统,并尝试从另一个JVM中的客户端向它发送消息。没有任何效果。我应该如何正确地做到这一点?这是代码:简单服务器packageakkaSample.severalSystemsimportakka.actor.{Props,Actor,ActorSystem}importcom.typesafe.config.ConfigFactoryclassHelloActorextendsActor{overridedefpreStart():Unit={println("Helloactorstarted")}defreceive={cas