小编das*_*chl的帖子

浏览器通过AJAX + setInterval继续使用内存

我需要使用JavaScript更新给定时间间隔内的大量数据.问题是,无论我使用什么JS库(甚至是裸骨js),所有浏览器似乎都在每个AJAX请求上分配内存,并且之后无法释放它.这是一个应该重现错误的示例:

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>Memleak Test</title>
            <meta charset="utf-8" />
            <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
            <script type="text/javascript">

                function readData() {
                    $.getJSON('data.php');
                }

                $(document).ready(function() {
                    setInterval(readData, 1000);
                });
            </script>
        </head>
        <body>
            <div id="content"></div>
        </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

jsbin提供了一个等效的测试页面

以下是有关此内容的更多信息:

  • 我还尝试将readData()函数直接放在setInterval()调用中.这似乎没有任何区别.
  • 我在这里使用jQuery,但任何其他库都会产生相同的错误.
  • 我的data.php脚本只是在PHP中使用json_encode()生成一个假的JSON-Object.
  • 我知道这里的一秒钟时间很短,在我的生产脚本中,时间范围是30秒.我只是想更快地看到效果(在生产应用程序中需要几个小时,但内存也已满).
  • 这里的问题是该应用程序将全天候开放.

看起来很简单,我认为我在这里做了一些非常错误的事情,如果这里的一些JS大师可以帮助我,那就太棒了!

javascript ajax jquery memory-leaks

14
推荐指数
2
解决办法
7849
查看次数

javac也是内联的吗?

我正在玩javap和一些非常简单的代码,这引发了一个 - 希望很简单 - 的问题.

这是代码优先:

public class Main {


  public static void main(String[] args) throws Exception {
    System.out.println(m1());
    System.out.println(m2());
  }

    private static String  m1() {
        return new String("foobar");
    }

    private static String m2() {
        String str = "foobar";
        return new String(str);
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我编译了代码并查看了输出(现在省略-verbose).

$ javap -c Main.class 
Compiled from "Main.java"
public class Main {
  public Main();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  public static void main(java.lang.String[]) throws java.lang.Exception;
    Code:
       0: getstatic     #2                  // …
Run Code Online (Sandbox Code Playgroud)

jvm bytecode javap

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

标签 统计

ajax ×1

bytecode ×1

javap ×1

javascript ×1

jquery ×1

jvm ×1

memory-leaks ×1