小编Ste*_*n C的帖子

通过Java中的对象引用访问静态变量

为什么我们可以通过Java中的对象引用访问静态变量,如下面的代码?

public class Static {
    private static String x = "Static variable";

    public String getX() {
        return this.x;                 // Case #1
    }

    public static void main(String[] args) {
        Static member = new Static();
        System.out.println(member.x);  // Case #2
    }   
}
Run Code Online (Sandbox Code Playgroud)

java static scope

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

Java不会生成正确的时区信息

我在Windows机器上运行Java程序.我正在尝试获取时区列表及其相关信息.这是完整的程序:

    String[] allTimeZones = TimeZone.getAvailableIDs();
    Date now = new Date();
    for (int i = 0; i < allTimeZones.length; i++) {
        TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]);
        System.out.format("%s;%s; %f \n", 
                          allTimeZones[i],
                          tz.getDisplayName(), 
                          (float) (tz.getOffset(now.getTime())/3600000.0));
    }
Run Code Online (Sandbox Code Playgroud)

其中一个生成的时区具有以下信息:

America/New_York;东部标准时间; -4.000000

这令人费解.此时,纽约正处于东夏夏令时.所以上面的信息不对.

有谁知道如何让Java生成

America/New_York;东部标准时间; -5.000000

或类似的东西

America/New_York;东夏夏令时; -4.000000

感谢帮助!

问候

java timezone

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

如何在Hadoop中将String对象转换为IntWritable对象

我想在Hadoop中将String对象转换为IntWritableObject.任何流程都可用于转换.

谢谢

java hadoop

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

SingleLiveEvent实际上是Android架构组件库的一部分吗?

我一直在使用这里SingleLiveData可以找到的课程.我的问题是:

  1. SingleLiveData实际上是Android架构组件的一部分?

  2. 使用它是个好主意吗?

android android-livedata android-architecture-components mutablelivedata

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

chromium 二进制文件不适用于arm64

我正在使用rushrush install并尝试在我从公司的存储库之一克隆的项目中运行。但是,它会失败并抛出以下错误:

The chromium binary is not available for arm64: 
  If you are on Ubuntu, you can install with:
  apt-get install chromium-browser
Run Code Online (Sandbox Code Playgroud)

注意:我使用 iTerm2 终端在 Apple Macbook Pro 上运行所有这些操作,以Monterey作为操作系统,由Apple M1 Pro芯片提供支持。

PS 我尝试在网上寻找答案并找到了这篇文章,但答案似乎对我不起作用。

macos apple-m1 macos-monterey

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

为什么这个尾递归?

看看这个Scala代码:

def rec(n: Int) {
  if (n > 1) {
    val d = n / 2
    rec(d)
//    if (d > 1)  // abort loop
      rec(n/d)
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码将导致无限循环.由于尾递归优化,我没有得到StackOverflowError.

用jad反编译我得到了这个Java代码:

public void rec(int n)
{
    int d;
    for(; n > 1; n /= d)
    {
        int i = n;
        d = i / 2;
        rec(d);
    }
}
Run Code Online (Sandbox Code Playgroud)

在循环的最后一行,该方法调用自身,因此我不理解尾调用位置.谁可以解释这个?

scala tail-recursion

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

java:需要提高校验和计算的性能

我正在使用以下函数来计算文件的校验和:

public static void generateChecksums(String strInputFile, String strCSVFile) {
    ArrayList<String[]> outputList = new ArrayList<String[]>();
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        File aFile = new File(strInputFile);
        InputStream is = new FileInputStream(aFile);

        System.out.println(Calendar.getInstance().getTime().toString() + 
                    " Processing Checksum: " + strInputFile);

        double dLength = aFile.length();
        try {
            is = new DigestInputStream(is, m);
            // read stream to EOF as normal...
            int nTmp;
            double dCount = 0;
            String returned_content="";
            while ((nTmp = is.read()) != -1) {
                dCount++;
                if (dCount % 600000000 == 0) {
                    System.out.println(". …
Run Code Online (Sandbox Code Playgroud)

java file-io checksum

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

JVM - 在次要GC中收集WeakReferences吗?

我很想知道这一点,因为这会使它们变得不那么有用.如果是这样,有没有办法让内存在主要GC上仅被"垃圾"弱引用?

java garbage-collection jvm weak-references

7
推荐指数
2
解决办法
1455
查看次数

垃圾收集年轻一代扫描

我正在尝试理解垃圾收集机制,我正在使用世代算法,我对年轻/老一代的差异有疑问.我读到了开始收集年轻一代的对象GC正在标记它们从GC根源开始找到活的,并且通常将它们复制到幸存者空间,清除年轻一代区域和瞧.

我不知道如果我们从GC根开始并且我们开始经历活动对象,我们在老一代中找不到对象吗?这是否意味着当我们在旧空间中击中一个物体时,我们会停止在那一点跟踪参考或什么?

java garbage-collection

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

垃圾收集器没有像在 Android 应用程序中那样释放“垃圾内存”

你好!

我是一名初级 Java 和 Android 开发人员,最近在处理我的应用程序的内存管理方面遇到了麻烦。我将把这篇文章分成几个部分,以使其更清晰易读。


我的应用程序的简要说明

这是一个由几个阶段(级别)组成的游戏。每个阶段都有一个玩家的起点和一个出口,引导玩家进入下一个阶段。每个阶段都有自己的一套障碍。目前,当玩家到达最后阶段(我目前只创建了 4 个)时,他/她会自动回到第一阶段(1 级)。

一个名为GameObject(扩展Android.View)的抽象类定义了玩家和游戏中存在的所有其他对象(障碍物等)的基本结构和行为。所有对象(本质上是视图)都绘制在我创建的自定义视图中(扩展 FrameLayout)。游戏逻辑和游戏循环由一个侧线程(gameThread)处理。这些阶段是通过从 xml 文件中检索元数据来创建的。

问题

除了我的代码中所有可能的内存泄漏(我一直在努力寻找和解决所有这些问题)之外,还有一个与垃圾收集器发生相关的奇怪现象。我将使用图像,而不是用文字来描述它并冒着让您感到困惑的风险。孔子说:“千言万语”。好吧,在这种情况下,我刚刚让您免于阅读 150,000 个单词,因为我下面的 GIF 有 150 帧。

第一次加载时的第 1 阶段。 该应用程序的总内存分配为 85mb。 第二次加载时的第 1 阶段。 该应用程序的总内存分配为 130mb。 在我强制执行 2 次垃圾回收(使用 Android Profiler)后,内存回到 85mb。

描述:第一张图片代表我的应用程序在第一次加载“stage 1”时的内存使用情况。第二个图像 (GIF) 首先表示第二次加载“阶段 1”时我的应用程序的内存使用时间线(这种情况发生,如前所述,当玩家击败最后一个阶段时),然后是四个强制启动的垃圾收集由我。

您可能已经注意到,这两种情况在内存使用方面存在巨大差异(几乎 50MB)。第一次加载“第一阶段”时,当游戏开始时,应用程序使用 85MB 内存。第二次加载同一个stage的时候,稍晚一点,内存使用量已经是130MB了!这可能是由于我的一些糟糕的编码,因此我不在这里。你有没有注意到,在我强行执行了 2 次(实际上是 4 次,但只有前 2 次重要)垃圾收集之后,内存使用情况又回到了它的“正常状态”(与第一次加载舞台时的内存使用情况相同)?这就是我所说的奇怪现象

问题

如果垃圾收集器应该从不再被引用的内存对象中删除(或者至少只有弱引用),为什么你在上面看到的“垃圾内存”只有在我强行调用GC和不是关于GC的正常执行?我的意思是,如果我手动启动的垃圾收集可以删除这个“thrash”,那么正常的GC执行也可以删除它。为什么没有发生?

我什至尝试在切换阶段时调用System.gc(),但是,即使垃圾收集发生这种情况,这种“颠簸”内存不会像我手动执行GC那样被删除。我是否遗漏了一些关于垃圾收集器如何工作或 Android 如何实现它的重要信息?

最后的考虑

我花了几天时间搜索、研究和修改我的代码,但我找不到为什么会这样。StackOverflow 是我最后的选择。谢谢!

注意:我打算发布一些可能与我的应用程序源代码相关的部分,但由于问题已经太长了,我将在这里停止。如果您觉得需要检查某些代码,请告诉我,我将编辑此问题。

我已经读过: …

java performance android garbage-collection memory-leaks

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