小编Rya*_*yan的帖子

JVM堆栈,堆和线程如何映射到物理内存或操作系统

编译器书(The Dragon book)解释了在堆栈上创建的值类型,并在堆上创建了引用类型.

对于Java,JVM还在运行时数据区域中包含堆和堆栈.在堆上创建对象和数组,方法帧被推送到堆栈.所有线程共享一个堆,而每个线程都有自己的堆栈.下图显示了这一点:

在此输入图像描述

有关Java运行时数据区的更多信息.

我不明白的是,由于JVM本质上是一个软件,那些JVM堆,堆栈和线程如何映射到物理机器?

如果有人可以比较Java和C++之间的这些概念,我将不胜感激.因为Java在JVM上运行,但C++没有.

为了使这个问题更加准确,我想知道以下内容:

  1. 与Java相比,C++运行时数据区是什么样的?一张图片会有所帮助,我找不到像上面的JVM那样好的图片.
  2. JVM堆,堆栈,寄存器和线程如何映射到操作系统?或者我应该问他们如何映射到物理机器?
  3. 每个JVM线程只是一个用户线程并以某种方式映射到kernal是真的吗?(用户线程与内核线程)

更新:我为进程的运行时物理内存绘制了一张图片.
在此输入图像描述

c++ java memory jvm runtime

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

如何在google-code-prettify中包装长代码行

我正在使用google-code-prettify的默认设置.当一条线太长时,它超出了边界,如下所示:在此输入图像描述 它们是否可以包装代码行?

javascript syntax-highlighting

11
推荐指数
2
解决办法
2458
查看次数

为什么可变字符串会导致安全问题?

我从另一篇文章中看到了答案:

String已广泛用作许多java类的参数,例如用于打开网络连接,打开数据库连接,打开文件.如果String不是不可变的,这将导致严重的安全威胁.

我认为在使用之前检查字符串可以解决问题.为什么字符串被设计为不可变的原因?

谁能给我一个具体的代码示例?

java string immutability

9
推荐指数
1
解决办法
1299
查看次数

RTMP通过http流式传输

我正在尝试使用Nginx-rtmp建立流媒体服务.配置文件是

    rtmp {
    server {
        listen 1935;

        chunk_size 4000;

        # video on demand for flv files
        application vod {
            play /var/flvs;
        }

        # video on demand for mp4 files
        application vod2 {
            play /var/mp4s;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望流媒体服务通过http而不是rtmp.最终我们希望客户端使用https连接到代理服务器,然后代理服务器使用rtmp与流服务器通信.我正在使用HTTP进行测试.所以我使用以下配置设置了HAProxy:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    #tune.ssl.default-dh-param 2048 

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on …
Run Code Online (Sandbox Code Playgroud)

nginx rtmp

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

无法通过套接字连接到本地MySQL服务器(不时)

我有一个LAMP堆栈设置.有时,当我从浏览器打开某个页面时,我收到以下错误消息:

Error creating the connection!: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Run Code Online (Sandbox Code Playgroud)

我认为服务器配置正确.问题大约每两个月发生一次.每次当我重启Linux服务器或重启mysql时,问题都消失了.我想永久解决这个问题.谁能给我一些想法?

非常感激.

编辑

问题再次发生,我检查了mysqld.sock文件,它不存在.你知道如何解决这个问题吗? - 瑞安7月23日16:24

mysql

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

如何确定字符串是英文句子还是代码?

考虑以下两个字符串,第一个是代码,第二个是英语句子(短语是准确的).如何检测第一个是代码而第二个不是代码.

1. for (int i = 0; i < b.size(); i++) {
2. do something in English (not necessary to be a sentence).
Run Code Online (Sandbox Code Playgroud)

我正在考虑计算特殊字符(例如"=",";","++"等),并设置是否达到某个阈值.有没有更好的方法来做到这一点?任何Java库?

请注意,代码可能无法解析,因为它不是完整的方法/语句/表达式.

我的假设是英语句子非常规则,它很可能只包含",",".","_","(",")"等.它们不包含这样的内容: write("the whole lot of text");

java string nlp

6
推荐指数
2
解决办法
2455
查看次数

如何打印"Hello World"? - 完整的生命周期

我在研究生院学习了编译器,操作系统,计算机体系结构课程.但我想在一个简单但真实的例子中看到这些概念(不太理论化).对于简单的例子,HelloWorld是一个不错的选择.

不仅这个小程序的生命周期很有趣,而且了解JVM,OS和Architecture如何工作可以帮助我们成为更好的程序员.

简而言之,我的问题是:我是否正确而完整地描述了这些步骤?

详细情况,我需要您的帮助以下内容:

  1. 指出我错的任何部分
  2. 我敢肯定我会错过很多有价值的观点,所以请在生命周期中添加任何有意义的观点.

我想知道的是HelloWorld如何遍历每一层,然后从它返回.假设此程序在带有UbuntuIntel CPU上运行 .

我会通过结合好的答案来更新这篇文章,直到最终接受一个答案.

以下是大家都知道的HelloWorld计划.

在此输入图像描述

它被编译为字节码,如下所示.

在此输入图像描述

字节码不可读,但我们可以使用javap -classpath . -c HelloWorld以下内容来查看助记符.

在此输入图像描述

然后它在JVM中加载,链接和初始化.

在此输入图像描述

由于它只有一个线程,我们假设它是以下JVM运行时数据区域中的左线程.

在此输入图像描述

JVM线程是用户级线程,因此它将映射到内核.在Ubuntu中,它是一对一的映射,如下所示:

在此输入图像描述

现在JVM制作了x86指令?(更新)

操作系统对此特定程序的作用是什么?

建筑的下一步是什么?

获取指令,解码,执行,存储器访问,以5步MIPS写回.

在此输入图像描述

参考文献:

  1. 操作系统基础知识

这可能是一个非常困难的问题.与如何使用某种API的问题不同,这需要了解几乎所有内容.

java architecture compiler-construction operating-system

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

使用Map和HashMap作为声明类型的区别

以下两个声明声明之间的区别是什么:

HashMap<Character, Character> map = new HashMap<Character, Character>();

Map<Character, Character> map = new HashMap<Character, Character>();
Run Code Online (Sandbox Code Playgroud)

使用界面Map而不是HashMap在这种特殊情况下的任何优点?

在下面的例子中,Map肯定更好,因为该方法可以接受不同类型的地图吗?(如果是这样的话)

public void method(Map map){

}
Run Code Online (Sandbox Code Playgroud)

java hashmap map

5
推荐指数
2
解决办法
3790
查看次数

使用jstree打开一个节点及其所有父节点

我正在尝试使用jstree,并在打开页面时打开一个节点及其所有父节点.这是我用来测试的html代码.

    <div id="treeTask">
       <ul>
          <li id="node_37"><a href="#">TEST1</a>
              <ul>
                  <li id="node_38"><a href="#">TEST2</a></li>
                  <li id="node_39"><a href="#">TEST3</a></li>
              </ul>
          </li>
      </ul>

      <ul>
          <li id="node_3"><a href="#">TEST1</a>
              <ul>
                  <li id="node_4"><a href="#">TEST2</a></li>
                  <li id="node_6"><a href="#">TEST3</a></li>
              </ul>
          </li>
      </ul>
   </div>
Run Code Online (Sandbox Code Playgroud)

这是调用初始化jstree并打开节点.

 $(function () { 
        $("#treeTask").jstree();

        $("#treeTask").bind("ready.jstree", function (event, data) { 
            $("#treeTask").jstree("open_node", $("#node_4"));

            if((data.inst._get_parent(data.rslt.obj)).length) { 
                data.inst._get_parent(data.rslt.obj).open_node(this, false); 
              }  
        }); 

  });
Run Code Online (Sandbox Code Playgroud)

我一直在操纵代码,但无法使其工作.如果有人能提供帮助我真的很感激.

非常感谢!

jstree

5
推荐指数
2
解决办法
9360
查看次数

禁用SyntaxHighlighter的双击选择

SyntaxHighlighter具有允许通过双击选择代码的功能。如何禁用此功能?

syntaxhighlighter

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