标签: jvm

如何从java应用程序内部获取vm参数?

我需要检查是否可以传递给JVM的某个选项是显式设置还是具有默认值.

更具体一点:
我需要创建一个具有比默认堆栈大更高的本机堆栈大小的特定线程,但是如果用户希望通过指定-Xss选项来自己处理这些事情,我想创建具有默认堆栈大小的所有线程(这将由用户在-Xss选项中指定).

我检查类,如java.lang.Systemjava.lang.Runtime,但这些都没有给我有关的信息-Xss.

有没有办法获得我需要的信息?

java jvm jvm-arguments

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

字节码功能在Java语言中不可用

目前(Java 6)您可以在Java字节码中使用Java语言无法做到的事情吗?

我知道两者都是图灵完整的,所以读"可以做"就是"可以做得更快/更好,或者只是以不同的方式".

我正在考虑invokedynamic使用Java生成的额外字节码,除了特定的字节码是针对未来的版本.

java jvm bytecode

144
推荐指数
6
解决办法
6万
查看次数

你如何崩溃JVM?

我正在读一本关于编程技巧的书,其中作者问受访者:"你如何崩溃JVM?" 我认为你可以通过编写一个最终耗尽所有内存的无限for循环来实现.

有人有什么想法吗?

java jvm

142
推荐指数
15
解决办法
6万
查看次数

Java:int数组使用非零元素初始化

根据JLS,int在初始化之后,应该用零填充数组.但是,我遇到的情况并非如此.这种行为首先发生在JDK 7u4中,也发生在所有后续更新中(我使用64位实现).以下代码抛出异常:

public static void main(String[] args) {
        int[] a;
        int n = 0;
        for (int i = 0; i < 100000000; ++i) {
            a = new int[10];
            for (int f : a)
                if (f != 0)
                  throw new RuntimeException("Array just after allocation: "+ Arrays.toString(a));
            Arrays.fill(a, 0);
            for (int j = 0; j < a.length; ++j)
                a[j] = (n - j)*i;
            for (int f : a)
                n += f;
        }
        System.out.println(n);
    }
Run Code Online (Sandbox Code Playgroud)

在JVM执行代码块的编译之后发生异常,并且不会出现-Xint标志.此外,该Arrays.fill(...)语句(与此代码中的所有其他语句一样)是必要的,如果不存在则不会发生异常.很明显,这个可能的错误与一些JVM优化有关.出于这种行为的原因有什么想法吗?

更新: …

java arrays jvm initialization java-7

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

Java方法声明中的最大参数数

Java中的方法可以拥有的最大参数数量是什么?为什么?

我在64位Windows系统上使用Java 1.8.

StackOverflow关于此的所有答案都说技术限制是255个参数而没有指定原因.

确切地说,255表示静态,254表示非静态(this在这种情况下将是255)方法.

我认为这可以在某种规范中描述,并且只允许静态定义的最大参数数量.

但这仅适用于int所有4字节类型.我用long参数做了一些测试,在这种情况下我只能声明127个参数.

使用String参数,从测试中推导出的允许数量是255(这可能是因为Java中的引用大小是4个字节?).

但由于我使用的是64位系统,因此引用大小应为8字节宽,因此对于String参数,允许的最大数量应为127,类似于long类型.

这个限制是如何应用的?

限制是否与方法的堆栈大小有关?

注意:我并不是真的会在任何方法中使用这些参数,但这个问题只是为了澄清确切的行为.

java jvm

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

Java中变量的内存地址

请看下面的图片.当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址.

当我们写作时,new我们可以看到一个"特殊"字符串作为输出.我的问题是:

  1. 这个输出是什么?
  2. 如果是操作系统给我们的内存地址:

    a)如何将此字符串转换为二进制?

    b)如何获得一个整数变量地址?

替代文字

java jvm memory-management hashcode memory-address

128
推荐指数
5
解决办法
13万
查看次数

如何正确设置JVM TimeZone

我正在尝试运行Java程序,但它采用默认的GMT时区而不是OS定义的时区.我的JDK版本是1.5,操作系统是Windows Server Enterprise(2007)

Windows指定了一个中央时区,但是当我运行以下程序时,它会给我一个GMT时间.

import java.util.Calendar;

public class DateTest
{
    public static void main(String[] args)
    {
        Calendar now = Calendar.getInstance();
        System.out.println(now.getTimeZone());
        System.out.println(now.getTime());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出

sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010
Run Code Online (Sandbox Code Playgroud)

请注意,我不想从应用程序设置时区.我希望JVM使用的时区应该是操作系统中指定的时区.(我没有发现其他具有1.4版JDK和Microsoft Server 2003的服务器的问题).

任何想法都将受到高度赞赏.

java timezone jvm jdk1.5 windows-server-2008

126
推荐指数
6
解决办法
21万
查看次数

我如何在Kotlin中获得一个随机数?

一种通用方法,可以返回2个参数之间的随机整数,如ruby rand(0..n).

有什么建议吗?

random jvm kotlin

122
推荐指数
11
解决办法
7万
查看次数

_JAVA_OPTIONS JAVA_TOOL_OPTIONS和JAVA_OPTS之间的区别

我认为在_JAVA_OPTIONS和之间进行比较会很棒JAVA_TOOL_OPTIONS.我一直在寻找一个,但我找不到任何东西,所以我希望我们能在Stackoverflow上找到这方面的知识.

JAVA_OPTS包括完整性.它不是JVM的一部分,但在野外有很多问题.

我知道的:

到目前为止,我发现:

  • JAVA_OPTSJDK不使用它,而是由许多其他应用程序使用(请参阅此文章).
  • JAVA_TOOL_OPTIONS并且_JAVA_OPTIONS是将JVM参数指定为环境变量而不是命令行参数的方法.
    • 被至少javajavac
    • 他们有这个优先权:
      1. _JAVA_OPTIONS (覆盖其他人)
      2. 命令行参数
      3. JAVA_TOOL_OPTIONS (被其他人覆盖)

我想知道什么

  • 有没有官方文件比较JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • JAVA_TOOL_OPTIONS和之间是否存在任何其他差异_JAVA_OPTIONS(优先级除外).
  • 其中的可执行文件回暖JAVA_TOOL_OPTIONS_JAVA_OPTIONS(除了javajavac)
  • 什么可以被包含在任何限制JAVA_TOOL_OPTIONS_JAVA_OPTIONS

官方文件

我找不到任何关于的文档_JAVA_OPTIONS.该文件JAVA_TOOL_OPTIONS没有说明差异:

由于无法始终访问或修改命令行,例如在嵌入式VM中或仅在脚本内深入启动的VM,因此提供了JAVA_TOOL_OPTIONS变量,以便在这些情况下可以启动代理.
...

示例脚本

这是我用来解决这个问题的代码.控制台输出包含在注释中:

export JAVA_OPTS=foobar
export JAVA_TOOL_OPTIONS= 
export _JAVA_OPTIONS="-Xmx512m -Xms64m"

java -version                          
# Picked up JAVA_TOOL_OPTIONS: 
# Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m
# …
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-arguments

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

在运行时获取Java版本

我需要解决JDK 1.5中的Java错误,该错误已在1.6中修复.我使用以下条件:

if (System.getProperty("java.version").startsWith("1.5.")) {
    ...
} else {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这适用于其他JVM吗?有没有更好的方法来检查这个?

java jvm

119
推荐指数
10
解决办法
12万
查看次数