精华内容
下载资源
问答
  • JVM 运行时数据区

    千次阅读 2013-11-11 20:48:54
    翻译人员: 铁锚 翻译时间: 2013年11月11日 原文链接: ...图1 JVM运行时数据区 1. 单线程数据区(非共享) 从上图可以看出,每个线程都有自己独立的数据区,包括 PC(程序计数器),JVM(方法)栈,以及本地
    翻译人员: 铁锚
    
    翻译时间: 2013年11月11日
    原文链接: JVM Run-Time Data Areas
    参考地址: JVM运行时是什么样子?

    这是阅读JVM规范时的笔记, 我画了一幅图来帮助自己加深理解:

    图1 JVM运行时数据区
    1. 单线程数据区(非共享)
    从上图可以看出,每个线程都有自己独立的数据区,包括 PC(程序计数器),JVM(方法)栈,以及本地方法栈. 当创建新线程时,这些数据区域将会一并创建.

    程序计数器: 英文名字是 Program Counter Register,简称PC, 用于记录每个线程执行到哪个地方了(可以认为程序是指令的序列,PC记录着下一条(或本条)应该执行的指令的地址).
    JVM方法栈:  包含如下面的图所示的一些栈帧(frame).
    本地方法栈: 英文为 Native Method Stack,顾名思义,适用于供 native方法使用的内存空间,本地方法(native method)指不用Java语言开发的方法,如 C,C++,PB等编译型语言所开发的动态链接库(中的方法).

    2. 所有线程共享数据区
    堆内存 和 方法区 是所有线程共享的数据区.

    堆内存: 英文名称 Heap,是Java编程最频繁使用的内存区域. 其中存储着 数组和对象,当 JVM启动时即创建此内存区域, 垃圾回收主要是指堆内存的回收。
    方法区: Method Area,存储了 运行时常量池,类结构信息(field and method data) 以及 方法,构造器的代码.
    运行时常量池: Runtime Constant Pool, 每一个类或者接口,在其编译后生成的 .class文件中,有一个部分叫做 常量表(constant_pool_table),JVM将class文件加载以后,就解析常量表的内容到运行时常量池. 包括编译时方法中就明确可知的数字值,String值, 以及必须在运行时解析的属性域引用(field reference).

    图2 JVM栈

    JVM栈(Stack)由一个个的 栈帧(Frame)组成,当一个方法被调用时会自动压入一个栈帧到Stack中. 每个栈帧(frame)由局部变量区,操作数栈,以及对常量(池)的引用组成.

    想要了解更详细的信息,建议访问: JVM官方文档.

    相关文章:

    1. JVM运行时是什么样子?
    2. What does a Java array look like in memory?
    3. What can we learn from Java HelloWorld?
    4. A simple Swing GUI example for Observer Design Pattern

    展开全文
  • 运行时数据区概述 1.运行时数据区模型图(整体图) 2.运行时数据区模型图(详情图) 3.概述 Java虚拟机定义了若干程序运行期间会使用到的运行时数据区: 有一些会随着虚拟机的启动而创建,随着虚拟机退出而销毁...

    0x01.运行时数据区概述

    1.运行时数据区模型图(整体图)

    在这里插入图片描述

    2.运行时数据区模型图(详情图)

    在这里插入图片描述

    3.概述

    • Java虚拟机定义了若干程序运行期间会使用到的运行时数据区:

      • 有一些会随着虚拟机的启动而创建,随着虚拟机退出而销毁。
      • 还有一些与线程一一对应,与线程对应的数据区会随着线程的开始和结束而创建和销毁。
      • 独立的线程:【程序计数器,栈,本地栈
      • 共享的线程:【堆,堆外内存,方法区
    • Java虚拟机与线程:

      • 线程是一个程序运行的单元,JVM允许一个应用有多个线程。
      • HotSpot中,每个线程都与操作系统的本地线程直接映射。当Java线程准备好执行后,此时操作系统的本地线程也同时创建。Java线程结束后,本地线程也会被回收。
      • 本地线程一旦初始化成功,就会调用Java线程中的run()方法。

    0x02.程序计数器(PC寄存器)

    1.概述

    • JVM中的PC寄存器是对物理PC寄存器对的一种抽象模拟。
    • PC计数器,也称为程序钩子
    • 每个线程都有一个PC寄存器,生命周期与线程的生命周期保持一致。
    • 程序计数器会存储当前线程正在执行的Java方法的JVM指令地址,如果是在执行本地方法,则是未指定的值(undefned)。
    • PC寄存器是唯一一个在Java虚拟机规范中没有规定任何OutOfMenmoryError情况的区域。

    2.作用

    • PC寄存器用来存储指向下一条指令的地址,也就是即将要执行的指令的代码,由执行引擎读取下一条指令。

    3.使用PC寄存器存储字节码指令地址的作用

    • 因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。
    • JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。

    4.PC寄存器为什么会被设定为线程私有?

    • CPU会不停的做任务切换,这样会导致经常的终端或恢复,为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法是为每一个线程都分配一个PC寄存器。这样各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。

    0x03.虚拟机栈

    1.概述

    • Java虚拟机早期也叫Java栈,每个线程在创建时都会创建一个虚拟机栈,其内部保存着一个个的栈帧,对应着一次次Java方法的调用。【是线程私有的
    • 生命周期和线程一致。
    • 虚拟机栈的作用: 主管Java程序的运行,它保存方法的局部变量,部分结果,并参与方法的返回与调用。

    2.StackOverFlowError

    • Java虚拟机规范允许Java栈的的大小是动态的或者是固定不变的。
    • 如果采用固定大小的Java虚拟机栈,那每一个线程的Java虚拟机容量可以在线程创建的时候选定。
    • 如果请求分配的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机就会抛出StackOverFlowError异常。

    3.设置栈大小

    • 我们可以在编译的时候使用参数-Xss来设置线程的最大栈空间。
    • 栈大小直接决定了函数调用的最大可达到深度

    4.栈的存储结构和运行原理

    • 栈中的数据都是以栈帧的格式存在。
    • 每个方法都对应一个栈帧
    • 栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。
    • 在一条活动的线程上,在一个时间点上,只会有一个活动的栈帧,这个栈帧是当前栈帧,与这个栈帧对应的方法是当前方法,定义这个方法的类叫做当前类
    • 执行引擎运行的所有字节码指令只针对当前栈帧进行操作。
    • 如果在该方法中调用了其它方法,那么对应新的栈帧会被创建出来,放在栈的顶端,成为新的栈帧。
      在这里插入图片描述

    5.栈帧内部结构

    • 栈帧存储的信息:

      • 局部变量表
      • 操作数栈
      • 动态链接。
      • 方法返回地址。
      • 一些附加信息。

    (1)局部变量表:

    • 局部变量表也被称为局部变量数组或本地变量表。

    • 定义为一个数字数组,主要用于存储方法参数和定义在方法内部的局部变量。(这些数据包括:基本数据类型,对象的引用,返回地址类型)

    • 局部变量表不存在数据安全性的问题。(是线程的私有数据)

    • 局部变量表所需的容量是在编译时期确定下来的,方法运行时期是不会改变局部变量表的大小的

    • 局部变量表的最基本的存储单元是Slot(变量槽)

      • 局部变量表中32位以内的类型占一个Slot,64位类型占两个Slot。
      • JVM会为局部变量表中的每一个Slot都分配一个访问索引,通过这个索引即可成功访问到局部变量表中指定的局部变量的值。
      • 当一个实例方法被调用时,它的方法参数和方法体内部定义的局部变量将会按照顺序被复制到局部变量表的每一个Slot上。
      • byte,short,char,boolean会在存储前转换为int,占一个Slot。
      • long和double则占两个Slot。
      • 如果当前栈帧是由构造方法或实例方法创建的,那么该对象引用this将会存放在index为0的slot处,其余的参数按照参数表顺序继续排列。
      • Slot是可以重复利用的。 【细节】
        在这里插入图片描述
      • 这个方法的局部变量表长度为3,c复用了已经销毁了的b的slot。
    • 局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。

    (2)操作数栈:

    • 每一个独立的栈帧都还包括一个后进先出的操作数栈,也可以称之为表达式栈

    • 在方法执行过程中,根据字节码指令,往操作数栈中写入数据或提取数据【入栈,出栈】。

    • 操作数栈主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储的空间。

    • 操作数栈就是JVM执行引擎的一个工作区,当一个方法刚开始执行的时候,一个新的栈帧也会被创建出来。

    • 每一个操作数栈都会拥有一个明确的栈深度用于存储权值,其所需的最大深度在编译器就确定了,保存在Code属性中。【max_stack

    • 32位的数据类型占一个栈单位的深度。

    • 64位的数据类型占两个栈单位的深度。

    • 栈顶缓存技术:

      • 将栈顶元素全部缓存在物理CPU的寄存器中,以此降低对内存的读/写次数,提升执行引擎的执行效率。

    (3)动态链接:

    • 每一个栈帧内部都包含一个指向运行时常量池中该栈所属方法的引用。包含这个引用的目的是为了支持当前方法的代码能够实现动态链接。
    • 在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用保存在class文件的常量池里面。动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。

    (4)方法返回地址:

    • 正常返回的情况:当执行引擎遇到任意一个方法返回的字节码指令,就会有返回值传递给上层的方法调用。

    • 存在异常的返回情况:当出现未处理耳朵异常时,就会非正常的退出,通过异常退出的,返回地址要通过异常表来确定,栈帧中一般不会保存这部分信息,并且不会返回任何值给上一层。

    (5)栈帧的附加信息

    • 栈帧中还会存在一些其他信息,比如对调试支持的信息。

    本文章是《JVM从零到一系列》的一篇,这个系列将会持续更新。 此系列文章所有内容来自于作者的整理,主要参考以下方面:

    • 《深入理解Java虚拟机》
    • 宋红康老师系列课程
    • 大厂面试题
    • JVM8官方参考文档
    • JVM8源代码

    本文所有图均为自己绘制,转载请附上作者署名和本文链接,谢谢啦^^~~ JVM相关的资料确实不是很多,希望我的总结能给大家一些帮助!
    谢谢您的观看!
    作者署名 – ATFWUS

    展开全文
  • 《Java虚拟机原理图解》3、JVM运行时数据区

    万次阅读 多人点赞 2014-10-13 14:50:08
    JVM运行时数据区(JVM Runtime Area) 其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。本文将通过以下几个话题来讨论JVM运行时数据区。 Topic 1. JVM运行时数据区 里有什么?Topic 2. 虚拟机栈 是什么...

    [last updated :2014/11/7] 

       JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。本文将通过以下几个话题来讨论JVM运行时数据区。

      • Topic 1. JVM运行时数据区里有什么?
      • Topic 2. 虚拟机栈 是什么?虚拟机栈里有什么?
      • Topic 3.栈帧是什么?栈帧里有什么?
      • Topic 4. 方法区是什么?方法区里有什么?

    Topic 1.JVM运行时数据区里有什么?

    Topic 2. 虚拟机栈是什么?虚拟机栈里有什么?


     

    Topic 3. 栈帧是什么?栈帧里有什么?

     

    Topic 4. 方法区是什么?方法区里有什么?

     

     


     

    作者的话

        本文是《Java虚拟机原理图解》系列的其中一篇,如果您有兴趣,请关注该系列的其他文章~

       觉得本文不错,顺手点个赞哦~~您的鼓励,是我继续分享知识的强大动力!

     

     

     

     

     

     

     

    -----------------------------------------------------------------------------------------------------------------------------------------

    本文源自  http://blog.csdn.net/luanlouis/,如需转载,请注明出处,谢谢!

     

     

     

     

    展开全文
  • JVM:一、运行时数据区域

    万次阅读 多人点赞 2018-02-22 23:48:58
     运行时常量池是方法的一部分,用于存放编译期生成的各种字面量和符号引用,运行时常量池相对于类常量池另外一个特性就是具备动态性,运行期间可能将新的常量放入池中。      参考资料:《深入理解...

    概述

        Java的虚拟机使Java的成为了一种跨平台的语言,Java的不直接与操作系统接触,而是通过虚拟机这个中间桥梁,通过JVM与底层接触。不同的系统有不同的JVM,但是所有的这些JVM都完美的支持Java语法,这就使得write once,run everywhere成为可能。

        除此之外,JVM的内存管理机制使得不需要再为每一个新的操作去删除/免费代码,由机器代替程序员这样就不容易出现内存泄露和内存溢出的问题了,但是一旦出现了这种问题如果不了解JVM是怎样使用内存的,那么排查错误将会非常困难。

    JVM运行时数据区域

    • 程序计数器
    • 虚拟机栈
    • 本地方法栈
    • 方法区

    有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户进程的启动和结束而创建和销毁。

    1. 程序计数器

        解释:【指向当前线程所执行的字节码的行号】,其实就是一小块内存,记录着当前程序运行到哪了字节码解释器的工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令(字节码指令是什么?)。分支,循环,跳转,异常处理,线程回复等都需要依赖这个计数器来完成。

        由于Java的多线程是通过线程轮流切换完成的,一个线程没有执行完时就需要一个东西记录它执行到哪了,下次抢占到了CPU资源时再从这开始,这个东西就是程序计数器,正是因为这样,所以它也是“线程私有”的内存。

        如果一个线程执行一个主要方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是一个本地方法,这个计数器的值则为空,此内存区域是唯一一个在Java的虚拟机规范中没有规定任何OutOfMemoryError异常情况的区域。

    2. Java虚拟机栈

        与程序计数器一样,Java的虚拟机栈也是线程私有的,虚拟机栈描述的是Java的方法执行的内存模型,方法每个执行在同时的创建³³都会一个栈桢用于存储局部变量表,操作数栈,动态链接,方法出口等信息,下图为栈桢结构图:

        通常所说的JVM里的堆和栈里这个栈就是Java的虚拟机栈,或者说是Java的虚拟机栈中的局部变量表部分。

        局部变量表存放了编译期可知的各种基本数据类型,对象引用(仅限局部变量的,不包含成员变量的)。其中每个局部变量空间(Slot)有32位,所以long和double类型的数据会占用两个局部变量空间,其他类型包括对象引用占用一个。对象引用调用的是存在堆中的对象,这个引用可以是对象的起始地址或者是指向对象的句柄。局部变量表所需的内存在编译期就已经确定了也就是进入这个方法时就已经确定了,运行期间不会更改。

        操作数栈则存储方法内一些进行了运算操作后的结果。

        动态链接,在方法内调用接口,通过字面量链接到具体的实现类,实现Java的动态特性。

        方法出口(返回地址),return或者发生Exception等。

        如果方法methodOne方法调用了methodTwo,那么methodOne就会先入栈创建一个栈桢,接着methodTwo再入栈成为栈顶(假设没有其他的方法执行),methodTwo执行完先出栈,接着methodOne执行完出栈。

        在使用递归的情况下,如果线程请求的栈的深度超过虚拟机所允许栈的深度就会抛出StackOverflowError;但是大部分虚拟机栈的深度都可以动态扩展,HotSpot中使用XSS可以设置栈的深度,如果扩展时无法请求到足够的内存就会抛出OutOfMemoryError。

    3. 本地方法栈

        本地方法栈和虚拟机栈相似,区别就是虚拟机为虚拟机栈执行Java服务(字节码服务),而本地方法栈为虚拟机使用到的Native方法服务。本地方法栈中使用的语言,使用方式,数据结构没有强制要求。

    4. Java堆

        堆是JVM里最大的一块内存区域,被所有线程共享,在虚拟机启动时创建,此区域的目的就是存放对象实例和数组,几乎所有的对象实例都在这分配(随着JIT的发展已经不是那么绝对了)的.java堆是垃圾收集管理的主要区域,由于现在收集器基本都采用分代收集方法,所以Java的堆中还可以分为新生代,老年代,永久代.1.8之后取消了永久代;其中新生代又划分为Eden空间,From Survivor空间,To Survivor空间。无论怎么划分都是为了更好的回收,分配,利用内存。下图为1.8后的内存模型

        根据的Java虚拟机规范,Java的堆可以处于物理不连续的空间中,只要逻辑连续即可。在实现时,既可以实现成固定大小的也可以是可扩展的(通过-Xmx和-Xms控制),如果堆中没有足够的内存完成实例分配,并且堆也无法得到扩展时,将会抛出的OutOfMemoryError异常。

    5. 方法区

        方法区也是一个线程共享的区域,存储已被虚拟机加载的类信息,常量(final),静态变量(static),JIT(即时编译器)编译后的代码等数据。

    Java虚拟机规范把方法区描述为堆的一个逻辑部分,其实堆和方法区可以看成数据部分;虚拟机栈和程序计数器可以看成指令部分;方法区存储一些不会变更的数据,之前热点上使用GC分代收集管理方法区,所以方法区也被称为永久代(本质上两者不等价),但是现在已经使用Native Memory来代替永久代了。

        虚拟机对方法区规范非常宽松,除了和Java的堆一样不需要连续的内存和可以选择固定大小意外,还可以选择不实现垃圾回收。垃圾回收行为在这个区域比较少见但还是有必要的,主要是针对常量池回收和类型的卸载。

    5.1运行时常量池

        运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,运行时常量池相对于类常量池另外一个特性就是具备动态性,运行期间可能将新的常量放入池中。 

     

     

    参考资料:《深入理解Java虚拟机》

    展开全文
  • C语言基础

    万人学习 2020-01-08 14:13:00
    4)、C语言是面向过程语言,C语言通过windows/linux平台下编译的,是直接运行在windows/linux平台下的,而XX始终是运行在他的虚拟机之上的;所以理论上C语言能做一些相对于比较底层的工作,像XX就不能编写Windows...
  • 其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为...
  • Python进阶-Matplotlib绘图

    千人学习 2018-12-18 13:43:55
    Matplotlib是python中非常常用的绘图工具包,可用于查看显示数据分析的结果,查看程序运行流程等等。本课程会讲解到matplotlib中最常用的一些知识点,包括绘制基本图形,散点图,直方图,等高线图,3D图,动态图等等...
  • MySQL数据库从入门到实战课

    万人学习 2019-12-31 14:09:39
    二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的...
  • Python环境安装与使用技巧

    千人学习 2019-09-29 15:41:51
    随着Python在行业内好评度的不断提高,更多的开发者转向Python开发岗位,那么如何选择合适的Python发行版本,又如何在Windows环境上安装稳定的Python
  • Matlab运行EEGLAB预处理的数据

    千次阅读 热门讨论 2018-05-25 10:34:21
    每天运行正常,有一次在运行matlab,出现函数不存在的现象,如下:原因:1.每天都在EEGLAB预处理数据后才运行test1,这次直接运行test1就报错;2.先运行EEGLAB,估计就运行了里面的pop_loadset函数,我是这样猜测...
  • 使用navicat运行sql文件并刷新后没有表格 ** 参考https://blog.csdn.net/qq_34942236/article/details/79883033 注意,有的sql文件指定插入有数据的数据库。 此时,可以在数据库里先建一个表(之后再删除),就会...
  • 【题目】在pyCharm中哪里设置及查看运行过程中的数据变量 概述 今天想在pyCharm中查看运行过程中的数据变量,在网上查找资料,最后找到方法,链接如下:...
  • 其中运行时间和运行结果只是一个数字,中间变量结果一个n*n的矩阵和一个2*n的矩阵。想把这些量保存在txt文件中。   save 函数 将工作空间中的变量写入文件,导出mat文件中。   1. 调用dlmwrite函数 dlmwrite...
  • 程序运行时的内存空间分布

    万次阅读 多人点赞 2014-03-21 01:33:18
    我们在写程序,既有程序的逻辑代码,也有在程序中定义的变量等数据,那么当我们的程序进行,我们的代码和数据究竟是存放在哪里的呢?下面就来总结一下。 一、程序运行时的内存空间情况 其实在程序运行时,...
  • 具体的恢复方法看正文工具/软件:AuroraDataRecovery步骤1:先百度搜索并下载软件运行后,直接双击需要恢复的分区,然后解压再右击软件图标选择《以管理员身份运行》软件步骤2:程序打开后,直接双击需要恢复数据的...
  • 运行matlab程序,想查看工作的变量,发现变量无法显示。 原代码特点: 代码中的主函数是以 function main()开头没有end结尾,子函数以function开口,没有end 结尾。 修改方式: 主函数中去掉function main(),...
  • Android中获取正在运行的应用程序-----ActivityManager的使用(二)
  • Spring动态切换多数据源Demo

    千次下载 热门讨论 2015-02-03 15:24:55
    请自行修改com/resources/datasource.properties中数据库配置,Demo中配置的两个数据源,一个是Mysql,一个是Oracle。 运行之前请自行建立数据库的表。
  • 常见JAVA运行时异常有哪些?

    千次阅读 2015-09-18 09:36:15
     ArithmeticException - 算术运算中,被0...ArrayStoreException - 数据存储异常,写数组操作,对象或数据类型不兼容 ClassCastException - 类型转换异常 IllegalArgumentException - 方法的参数无效 Illega
  • WebService处理大数据数据在通过WebService处理大数据数据时出现如下错误:soap fault: 运行配置文件中指定的扩展出现异常。 ---> 超过了最大请求长度。 解决方法:是因为传入的参数大于系统默认配置的值,asp...
  • 具体的恢复方法看正文工具/软件:星空数据恢复软件步骤1:先下载并解压程序打开后,直接双击需要恢复的分区,然后右击软件图标选择《以管理员身份运行》步骤2:程序运行后,直接双击需要恢复的分区步骤3:软件会很快...
  • 问题原因:1、想通过数据交换平台把基础资料导入到新的账套中,但是点"数据交换平台"后,会提示"运行时错误,-2147417848(80010108)方法 作用于对象 失败",系统是WIN2003新做的,而且也进行过修复,并重新装过软件,这...
  • 具体的恢复方法看正文工具/软件:星空数据恢复软件步骤1:先下载并解压软件运行后,直接双击需要恢复的分区,然后右击软件图标选择《以管理员身份运行》步骤2:软件运行后,直接双击需要恢复的分区步骤3:程序找到...
  • MaxCompute SQL查询优化解析

    千人学习 2016-12-22 14:37:53
    MaxCompute是阿里云的大数据解决方案,它在跨数据中心的超大规模分布式系统上提供多种编程接口,使得用户可以灵活地在其上开发大数据应用。这个分享会专注于SQL领域,介绍MaxCompute SQL近的发展,如何利用基于代价...
  • java数据结构和算法(第二版)

    千次下载 热门讨论 2012-11-29 21:12:37
    附录A运行专题applet和示例程序 专题applet 示例程序 SunMicrosystem软件开发工具集 重名的类文件 其他开发系统 附录B进一步学习 数据结构和算法 面向对象程序语言 面向对象设计(OOD)和软件工程 附录C问题答案 第1章...
  • Scala基础入门教程,解析Scala集合操作,通过本课程的学习,能够应用Scala进行Spark应用程序开发、掌握Spark的基本运行原理及编程模型,能够熟悉运用Spark SQL进行大数据仓库的开发,掌握Spark流式计算、Spark机器...
  • 数据挖掘方案

    万次阅读 2018-01-31 09:22:48
    spark是实时大数据分析、挖掘的流行方案,hadoop是大数据存储和运行的流行方案,本demo主要表述用spark + hadoop如何做大数据挖掘的通用方案,包含了,包括了环境资源整合、spark和hadoop的整合,各部分模块的关系,...
  • 用java实现爬虫抓取网页中的表格数据功能源码

    千次下载 热门讨论 2016-12-20 10:52:27
    使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,...包解压后导入MyEclipse就可以使用,在TestCrawTable中右键运行就能看到抓取到的数据。其他的调试可以自行修改。
  • 数据库里面的数据类型错了,应该是varchar,而我选了varbinary。
  • 今天遇到这样一个问题,“Microsoft JScript 运行时错误: 缺少 '}'”,在之前使用DataTable转换成Json数据,并解析Json数据过程中从未出现过此问题,经过测试发现从数据库查询出的数据格式的问题。  由DataTable...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,823,128
精华内容 1,929,251
关键字:

运行时数据区