精华内容
下载资源
问答
  • 欢迎关注github《大数据成神路》 目录 、概述 二、垃圾收集器(garbage collector (GC)) 是什么? 、为什么需要GC? 、为什么需要多种GC? 五、对象存活的判断 、垃圾回收算法 6.1 标记 -清除算法 6.2 ...

    《2021年最新版大数据面试题全面开启更新》

    欢迎关注github《大数据成神之路》

    目录

    一、概述
    二、垃圾收集器(garbage collector (GC)) 是什么?
    三、为什么需要GC?
    四、为什么需要多种GC?
    五、对象存活的判断
    六、垃圾回收算法
    6.1 标记 -清除算法
    6.2 复制算法
    6.3 标记-整理算法
    6.4 分代收集算法
    七、垃圾收集器
    7.1 Serial收集器
    7.2 ParNew收集器
    7.3 Parallel收集器
    7.4 CMS收集器
    7.5 G1收集器
    八、常用的收集器组合 
     

    正文

     

    一、概述

    垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。

    jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的。

     

    二、垃圾收集器(garbage collector (GC)) 是什么?

    GC其实是一种自动的内存管理工具,其行为主要包括2步

    • 在Java堆中,为新创建的对象分配空间
    • 在Java堆中,回收没用的对象占用的空间

     

    三、为什么需要GC?

    释放开发人员的生产力

     

    四、为什么需要多种GC?

    首先,Java平台被部署在各种各样的硬件资源上,其次,在Java平台上部署和运行着各种各样的应用,并且用户对不同的应用的 性能指标 (吞吐率和延迟) 预期也不同,为了满足不同应用的对内存管理的不同需求,JVM提供了多种GC以供选择

    性能指标
    最大停顿时长:垃圾回收导致的应用停顿时间的最大值
    吞吐率:垃圾回收停顿时长和应用运行总时长的比例

    不同的GC能满足不同应用不同的性能需求,现有的GC包括:

      • 序列化GC(serial garbage collector):适合占用内存少的应用
      • 并行GC 或 吞吐率GC(parallel or throughput garbage collector):适合占用内存较多,多CPU,追求高吞吐率的应用
      • 并发GC:适合占用内存较多,多CPU的应用,对延迟有要求的应用

     

    五、对象存活的判断

    判断对象是否存活一般有两种方式:

    引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,缺点是无法解决对象相互循环引用的问题。

    可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。不可达对象。

    在Java语言中,GC Roots包括:

      虚拟机栈中引用的对象。

      方法区中类静态属性实体引用的对象。

      方法区中常量引用的对象。

      本地方法栈中JNI引用的对象。

    由于循环引用的问题,一般采用跟踪(可达性分析)方法

     

    六、垃圾回收算法

    6.1 标记 -清除算法

    “标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。

    它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高;另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

    6.2 复制算法

    “复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

    这样使得每次都是对其中的一块进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。只是这种算法的代价是将内存缩小为原来的一半,持续复制长生存期的对象则导致效率降低。

    6.3 标记-整理算法

    复制收集算法在对象存活率较高时就要执行较多的复制操作,效率将会变低。更关键的是,如果不想浪费50%的空间,就需要有额外的空间进行分配担保,以应对被使用的内存中所有对象都100%存活的极端情况,所以在老年代一般不能直接选用这种算法。

    根据老年代的特点,有人提出了另外一种“标记-整理”(Mark-Compact)算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

    6.4 分代收集算法

    GC分代的基本假设:绝大部分对象的生命周期都非常短暂,存活时间短。

    “分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收。

    七、垃圾收集器

    如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现,不同厂商、不同版本的虚拟机实现差别很大,HotSpot中包含的收集器如下:

    7.1 Serial收集器

    串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)

    参数控制:-XX:+UseSerialGC  串行收集器

    7.2 ParNew收集器

    ParNew收集器其实就是Serial收集器的多线程版本。新生代并行,老年代串行;新生代复制算法、老年代标记-压缩

    参数控制:-XX:+UseParNewGC  ParNew收集器

    -XX:ParallelGCThreads 限制线程数量

    7.3 Parallel收集器

    Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。可以通过参数来打开自适应调节策略,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量;也可以通过参数控制GC的时间不大于多少毫秒或者比例;新生代复制算法、老年代标记-压缩

    参数控制:-XX:+UseParallelGC  使用Parallel收集器+ 老年代串行

    7.4 CMS收集器

    CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用都集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。

    从名字(包含“Mark Sweep”)上就可以看出CMS收集器是基于“标记-清除”算法实现的,它的运作过程相对于前面几种收集器来说要更复杂一些,整个过程分为4个步骤,包括: 

    初始标记(CMS initial mark)

    并发标记(CMS concurrent mark)

    重新标记(CMS remark)

    并发清除(CMS concurrent sweep)

     其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。 
          由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行。老年代收集器(新生代使用ParNew)

      优点:并发收集、低停顿 

       缺点:产生大量空间碎片、并发阶段会降低吞吐量

       参数控制:-XX:+UseConcMarkSweepGC  使用CMS收集器

                 -XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长

                -XX:+CMSFullGCsBeforeCompaction  设置进行几次Full GC后,进行一次碎片整理

                -XX:ParallelCMSThreads  设定CMS的线程数量(一般情况约等于可用CPU数量)

    7.5 G1收集器

    G1是目前技术发展的最前沿成果之一,HotSpot开发团队赋予它的使命是未来可以替换掉JDK1.5中发布的CMS收集器。与CMS收集器相比G1收集器有以下特点:

    1. 空间整合,G1收集器采用标记整理算法,不会产生内存空间碎片。分配大对象时不会因为无法找到连续空间而提前触发下一次GC。

    2. 可预测停顿,这是G1的另一大优势,降低停顿时间是G1和CMS的共同关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为N毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特征了。

    上面提到的垃圾收集器,收集的范围都是整个新生代或者老年代,而G1不再是这样。使用G1收集器时,Java堆的内存布局与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔阂了,它们都是一部分(可以不连续)Region的集合。

    G1对Heap的划分

     

    G1的新生代收集跟ParNew类似,当新生代占用达到一定比例的时候,开始出发收集。和CMS类似,G1收集器收集老年代对象会有短暂停顿。

    收集步骤

    1、标记阶段,首先初始标记(Initial-Mark),这个阶段是停顿的(Stop the World Event),并且会触发一次普通Mintor GC。对应GC log:GC pause (young) (inital-mark)

    2、Root Region Scanning,程序运行过程中会回收survivor区(存活到老年代),这一过程必须在young GC之前完成。

    3、Concurrent Marking,在整个堆中进行并发标记(和应用程序并发执行),此过程可能被young GC中断。在并发标记阶段,若发现区域对象中的所有对象都是垃圾,那个这个区域会被立即回收(图中打X)。同时,并发标记过程中,会计算每个区域的对象活性(区域中存活对象的比例)。

     

     

    4、Remark, 再标记,会有短暂停顿(STW)。再标记阶段是用来收集 并发标记阶段 产生新的垃圾(并发阶段和应用程序一同运行);G1中采用了比CMS更快的初始快照算法:snapshot-at-the-beginning (SATB)。

    5、Copy/Clean up,多线程清除失活对象,会有STW。G1将回收区域的存活对象拷贝到新区域,清除Remember Sets,并发清空回收区域并把它返回到空闲区域链表中。

     

    6、复制/清除过程后。回收区域的活性对象已经被集中回收到深蓝色和深绿色区域。

     

    八、常用的收集器组合 

      新生代GC策略 年老代GC策略

    说明

    组合1 Serial Serial Old

    Serial和Serial Old都是单线程进行GC,特点就是GC时暂停所有应用线程。

    组合2 Serial CMS+Serial Old CMS(Concurrent Mark Sweep)是并发GC,实现GC线程和应用线程并发工作,不需要暂停所有应用线程。另外,当CMS进行GC失败时,会自动使用Serial Old策略进行GC。
    组合3

    ParNew

    CMS

    使用-XX:+UseParNewGC选项来开启。ParNew是Serial的并行版本,可以指定GC线程数,默认GC线程数为CPU的数量。可以使用-XX:ParallelGCThreads选项指定GC的线程数。

    如果指定了选项-XX:+UseConcMarkSweepGC选项,则新生代默认使用ParNew GC策略。

    组合4

    ParNew

    Serial Old 使用-XX:+UseParNewGC选项来开启。新生代使用ParNew GC策略,年老代默认使用Serial Old GC策略。
    组合5

    Parallel Scavenge

    Serial Old

    Parallel Scavenge策略主要是关注一个可控的吞吐量:应用程序运行时间 / (应用程序运行时间 + GC时间),可见这会使得CPU的利用率尽可能的高,适用于后台持久运行的应用程序,而不适用于交互较多的应用程序。

    组合6

    Parallel Scavenge

    Parallel Old

    Parallel Old是Serial Old的并行版本

     

    组合7

    G1GC

    G1GC

    -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC        #开启
    -XX:MaxGCPauseMillis =50                  #暂停时间目标
    -XX:GCPauseIntervalMillis =200          #暂停间隔目标
    -XX:+G1YoungGenSize=512m            #年轻代大小
    -XX:SurvivorRatio=6                            #幸存区比例

     

    展开全文
  • 垃圾回收之分代假设

    2019-10-09 00:51:30
    内存模型就像个衣柜有很多隔断,假如每个隔断内部都是满的,如果执行清理,那么最后可能内存会很乱,一三五层隔断有东西,二四六没东西,或者更乱。 大家可以想象一下,假如要写入个很大的文件,需要个连续的...
        
    标记-清除(mark and Sweep)是最经典的垃圾回收算法

    碎片整理

    内存模型就像一个衣柜有很多隔断,假如每个隔断内部都是满的,如果执行清理,那么最后可能内存会很乱,一三五层隔断有东西,二四六没东西,或者更乱。

    大家可以想象一下,假如要写入一个很大的文件,需要一个连续的内存地址来存储。如果内存碎片很多,可能在寻找地址的时候就会浪费很多时间。

    4279695-3f18151f192458a8

    所以在JVM每次执行清理的时候会执行内存清理整理,以减少内存碎片。

    分代假设

    对象越多则收集垃圾的消耗时间越长,所以研究人员发现,程序中的大多可回收的垃圾归为两类:

    • 大部分很快就不使用或立即无用
    • 存活时间很长的

    如果统一去处理这些垃圾,可能就会消耗更长的时间处理存活较长的垃圾,所以这些观测形成了弱代假设。基于这一假设,VM的内存分为,年轻代(Young)和老年代(Old/Tenured)

    拆分这两个可清理的单独区域,允许采取不同的算法从而来大幅提高GC的性能。

    但是这种方法不是没有问题,例如,不同分代中的对象可能会互相引用,这样在收集某个分代可能就是GC root。
    没有完美的垃圾回收算法,只有好的算法,之所以这样说是因为,GC算法专门针对“要么死得快,要么活的长”这类特征的对像来优化,JVM对于那些不长不短的对象就很<font color=red>awkword(尴尬)</font>

    内存池(Memory Pools)

    Java内存模型是很抽象的,很多定义也不同,网上资料各异没有明确官方定义,但是小编感觉,只要理解是对的,有助你Java开发,那么怎么理解怎么记,就算是错的,也会增加你对Java垃圾回收的理解,这里用一个图来把这个抽象的东西,表述一下。


    4279695-df3d97888bf9668b

    新生代(Eden,伊甸园)

    Eden是内存中的一个区域,用来分配新创建的对象。通常会与多个线程同时创建多个对象,所以Eden区被划分为多一个线程本地分配缓冲区,通过分离,避免与其他线程同步操作。

    4279695-6187a6e7c7d0ce69

    如果线程缓冲区没有足够内存了,就会在Eden共享区分配,如果共享区也没有了内存,就会触发年轻代的GC来释放内存。如果GC之后Eden区依然没有足够的内存,则对象就分配到年老代,Old

    当Eden去进行垃圾收集的时候,GC将从root可达的对象过一遍,并标记存活对象,标记完成后,Eden中所有存活的对象,被复制到Eden的右边的存活区(Survivor spaces),这个时候Eden区可能就是空的,然后分配新对象,这种方法就是标记-复制,是复制而不是移动。

    存活区(Survivor Spaces)

    Eden 区的旁边是两个存活区, 称为 from 空间和 to 空间。需要着重强调的的是, 任意时刻总有一个存活区是空的(empty)。

    空的这个存活区在下一次年轻代GC是存放对象,年轻代中所有的存活对象(包括Edenq区和非空的那个 “from” 存活区)都会被复制到 ”to“ 存活区。GC过程完成后, ”to“ 区有对象,而 ‘from’ 区里没有对象。两者的角色进行正好切换 。

    SouthEast

    存活的对象会在俩个区多次复制,当存活区对象在经历多次GC后依然,存活那么这个时候就可以升级为老年代Old。为了确定一个对象是否“足够老”, 可以被提升(Promotion)到老年代,GC模块跟踪记录每个存活区对象存活的次数。每次分代GC完成后,存活对象的年龄就会增长。当年龄超过提升阈值(tenuring threshold), 就会被提升到老年代区域。

    具体的提升阈值由JVM动态调整,但也可以用参数-XX:+MaxTenuringThreshold 来指定上限。如果设置 -XX:+MaxTenuringThreshold=0, 则GC时存活对象不在存活区之间复制,直接提升到老年代。

    现代 JVM 中这个阈值默认设置为15个 GC周期。这也是HotSpot中的最大值。

    如果存活区空间不够存放年轻代中的存活对象,提升(Promotion)也可能更早地进行。

    老年代(Old Generation)

    老年代的对象是经历了筛选进来的,老年代内存空间通常会更大,一般是垃圾的概率会相对小。

    老年代的GC发生频率比年轻代小很多,因为大部分都是存活的,所以使用的算法也不是标记和复制,对于因为是垃圾的改变会相对小,所以如果说是清理垃圾,更不说是,优化内存。但是都会经历下面几步:

    • 通过标志位(marked bit),标记所有通过 GC roots 可达的对象.
    • 删除所有不可达对象
    • 整理老年代空间中的内容,方法是将所有的存活对象复制,从老年代空间开始的地方,依次存放。

    永久代(PermGen)

    在Java 8 之前有一个特殊的空间,称为“永久代”(Permanent Generation)。这是存储元数据(metadata)的地方,比如 class 信息等。此外,这个区域中也保存有其他的数据和信息, 包括 内部化的字符串(internalized strings)等等。实际上这给Java开发者造成了很多麻烦,因为很难去计算这块区域到底需要占用多少内存空间。预测失败导致的结果就是产生 java.lang.OutOfMemoryError: Permgen space 这种形式的错误。除非 ·OutOfMemoryError· 确实是内存泄漏导致的,否则就只能增加 permgen 的大小,例如下面的示例,就是设置 permgen 最大空间为 256 MB:

    java -XX:MaxPermSize=256m com.mycompany.MyApplication

    元数据区(Metaspace)

    既然估算元数据所需空间那么复杂, Java 8直接删除了永久代(Permanent Generation),改用 Metaspace。从此以后, Java 中很多杂七杂八的东西都放置到普通的堆内存里。

    当然,像类定义(class definitions)之类的信息会被加载到 Metaspace 中。元数据区位于本地内存(native memory),不再影响到普通的Java对象。默认情况下, Metaspace的大小只受限于 Java进程可用的本地内存。这样程序就不再因为多加载了几个类/JAR包就导致 java.lang.OutOfMemoryError: Permgen space. 。注意, 这种不受限制的空间也不是没有代价的 —— 如果 Metaspace 失控, 则可能会导致很严重的内存交换(swapping), 或者导致本地内存分配失败。

    如果需要避免这种最坏情况,那么可以通过下面这样的方式来限制 Metaspace 的大小, 如 256 MB:

    java -XX:MaxMetaspaceSize=256m com.mycompany.MyApplication

    Minor GC vs Major GC vs Full GC

    以下内容原文写的很清楚,是概念上内容,采用原文描述
    垃圾收集事件(Garbage Collection events)通常分为: 小型GC(Minor GC) - 大型GC(Major GC) - 和完全GC(Full GC) 。本节介绍这些事件及其区别。然后你会发现这些区别也不是特别清晰。

    最重要的是,应用程序是否满足 服务级别协议(Service Level Agreement, SLA), 并通过监控程序查看响应延迟和吞吐量。也只有那时候才能看到GC事件相关的结果。重要的是这些事件是否停止整个程序,以及持续多长时间。

    虽然 Minor, Major 和 Full GC 这些术语被广泛应用, 但并没有标准的定义, 我们还是来深入了解一下具体的细节吧。

    小型GC(Minor GC)

    年轻代内存的垃圾收集事件称为小型GC。这个定义既清晰又得到广泛共识。对于小型GC事件,有一些有趣的事情你应该了解一下:
    - 当JVM无法为新对象分配内存空间时总会触发 Minor GC,比如 Eden 区占满时。所以(新对象)分配频率越高, Minor GC 的频率就越高。
    - Minor GC 事件实际上忽略了老年代。从老年代指向年轻代的引用都被认为是GC Root。而从年轻代指向老年代的引用在标记阶段全部被忽略。
    - Minor GC 每次都会引起全线停顿(stop-the-world ), 暂停所有的应用线程。对大多数程序而言,暂停时长基本上是可以忽略不计的, 因为 Eden 区的对象基本上都是垃圾, 也不怎么复制到存活区/老年代。如果情况不是这样, 大部分新创建的对象不能被垃圾回收清理掉, 则 Minor GC的停顿就会持续更长的时间。

    所以 Minor GC 的定义很简单 —— Minor GC 清理的就是年轻代。

    Major GC vs Full GC

    Minor GC 清理的是年轻代空间(Young space),相应的,其他定义也很简单:

    • Major GC(大型GC) 清理的是老年代空间(Old space)。
    • Full GC(完全GC)清理的是整个堆, 包括年轻代和老年代空间。

    悲剧的情况出现了,很多Major GC是由于Minor GC触发的,所以很多情况下这和Full GC就没有多大区别了,这个就很<font color=red>awkword(尴尬)</font>

    这也让我们认识到,不应该去操心是叫 Major GC 呢还是叫 Full GC, 我们应该关注的是: 某次GC事件 是否停止所有线程,或者是与其他线程并发执行。

    文章参考自附录地址,附带小编自己的学习经历和理解重新翻译,希望大家共进步

    展开全文
  • 术曰:下有半,是二分之一。以一为二,半为一,并之得,为法。置田二百十步,亦以一为二乘之,为实。实如法得从步。 2、少广:今有田广一步半、分步之一。求田一亩,问从几何? 答曰:一百十步、一十一分步之一...

    四:《少广》
    少广:少广术曰:置全步及分母子,以最下分母遍乘诸分子及全步,各以其母除其子,置之于左。命通分者,又以分母遍乘诸分子,及已通者皆通而同之,并之为法。置所求步数,以全步积分乘之为实。实如法而一,得从步。
    1、少广:今有田广一步半。求田一亩,问从几何?
    答曰:一百六十步。术曰:下有半,是二分之一。以一为二,半为一,并之得三,为法。置田二百四十步,亦以一为二乘之,为实。实如法得从步。
    2、少广:今有田广一步半、三分步之一。求田一亩,问从几何?
    答曰:一百三十步、一十一分步之一十。术曰:下有三分,以一为六,半为三,三分之一为二,并之得一十一为法。置田二百四十步,亦以一为六乘之,为实。实如法得从步。
    3、少广:今有田广一步半、三分步之一、四分步之一。求田一亩,问从几何?
    答曰:一百一十五步、五分步之一。术曰:下有四分,以一为一十二,半为六,三分之一为四,四分之一为三,并之得二十五,以为法。置田二百四十步,亦以一为一十二乘之,为实。实如法而一,得从步。
    4、少广:今有田广一步半、三分步之一、四分步之一、五分步之一。求田一亩,问从几何?
    答曰:一百五步、一百三十七分步之一十五。术曰:下有五分,以一为六十,半为三十,三分之一为二十,四分之一为一十五,五分之一为一十二,并之得一百三十七,以为法。置田二百四十步,亦以一为六十乘之,为实。实如法得从步。
    5、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一。求田一亩,问从几何?
    答曰:九十七步、四十九分步之四十七。术曰:下有六分,以一为一百二十,半为六十,三分之一为四十,四分之一为三十,五分之一为二十四,六分之一为二十,并之得二百九十四以为法。置田二百四十步,亦以一为一百二十乘之,为实。实如法得从步。
    6、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一。求田一亩,问从几何?
    答曰:九十二步、一百二十一分步之六十八。术曰:下有七分,以一为四百二十,半为二百一十,三分之一为一百四十,四分之一为一百五,五分之一为八十四,六分之一为七十,七分之一为六十,并之得一千八十九,以为法。置田二百四十步,亦以一为四百二十乘之,为实。实如法得从步。
    7、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一。求田一亩,问从几何?
    答曰:八十八步、七百六十一分步之二百三十二。术曰:下有八分,以一为八百四十,半为四百二十,三分之一为二百八十,四分之一为二百一十,五分之一为一百六十八,六分之一为一百四十,七分之一为一百二十,八分之一为一百五,并之得二千二百八十三,以为法。置田二百四十步,亦以一为八百四十乘之,为实。实如法得从步。
    8、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一。求田一亩,问从几何?
    答曰:八十四步、七千一百二十九分步之五千九百六十四。术曰:下有九分,以一为二千五百二十,半为一千二百六十,三分之一为八百四十,四分之一为六百三十,五分之一为五百四,六分之一为四百二十,七分之一为三百六十,八分之一为三百一十五,九分之一为二百八十,并之得七千一百二十九,以为法。置田二百四十步,亦以一为二千五百二十乘之,为实。实如法得从步。
    9、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一。求田一亩,问从几何?
    答曰:八十一步、七千三百八十一分步之六千九百三十九。术曰:下有一十分,以一为二千五百二十,半为一千二百六十,三分之一为八百四十,四分之一为六百三十,五分之一为五百四,六分之一为四百二十,七分之一为三百六十,八分之一为三百一十五,九分之一为二百八十,十分之一为二百五十二,并之得七千三百八十一,以为法。置田二百四十步,亦以一为二千五百二十乘之,为实。实如法得从步。
    10、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一、十一分步之一。求田一亩,问从几何?
    答曰:七十九步、八万三千七百一十一分步之三万九千六百三十一。术曰:下有一十一分,以一为二万七千七百二十,半为一万三千八百六十,三分之一为九千二百四十,四分之一为六千九百三十,五分之一为五千五百四十四,六分之一为四千六百二十,七分之一为三千九百六十,八分之一为三千四百六十五,九分之一为三千八十,一十分之一为二千七百七十二,一十一分之一为二千五百二十,并之得八万三千七百一十一,以为法。置田二百四十步,亦以一为二万七千七百二十乘之,为实。实如法得从步。
    11、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一、十一分步之一、十二分步之一。求田一亩,问从几何?
    答曰:七十七步、八万六千二十一分步之二万九千一百八十三。术曰:下有一十二分,以一为八万三千一百六十,半为四万一千五百八十,三分之一为二万七千七百二十,四分之一为二万七百九十,五分之一为一万六千六百三十二,六分之一为一万三千八百六十,七分之一为一万一千八百八十,八分之一为一万三百九十五,九分之一为九千二百四十,一十分之一为八千三百一十六,十一分之一为七千五百六十,十二分之一为六千九百三十,并之得二十五万八千六十三,以为法。置田二百四十步,亦以一为八万三千一百六十乘之,为实。实如法得从步。
    12、少广:今有积五万五千二百二十五步。问为方几何?
    答曰:二百三十五步。
    13、少广:又有积二万五千二百八十一步。问为方几何?
    答曰:一百五十九步。
    14、少广:又有积七万一千八百二十四步。问为方几何?
    答曰:二百六十八步。
    15、少广:又有积五十六万四千七百五十二步、四分步之一。问为方几何?
    答曰:七百五十一步半。
    16、少广:又有积三十九亿七千二百一十五万六百二十五步。问为方几何?
    答曰:六万三千二十五步。开方术曰:置积为实。借一算步之,超一等。议所得,以一乘所借一算为法,而以除。除已,倍法为定法。其复除。折法而下。复置借算步之如初,以复议一乘之,所得副,以加定法,以除。以所得副从定法。复除折下如前。若开之不尽者为不可开,当以面命之。若实有分者,通分内子为定实。乃开之,讫,开其母报除。若母不可开者,又以母乘定实,乃开之,讫,令如母而一。
    17、少广:今有积一千五百一十八步、四分步之三。问为圆周几何?
    答曰:一百三十五步。
    18、少广:今有积三百步。问为圆周几何?
    答曰:六十步。开圆术曰:置积步数,以十二乘之,以开方除之,即得周。
    19、少广:今有积一百八十六万八百六十七尺。问为立方几何?
    答曰:一百二十三尺。
    20、少广:今有积一千九百五十三尺、八分尺之一。问为立方几何?
    答曰:一十二尺半。
    21、少广:今有积六万三千四百一尺、五百一十二分尺之四百四十七。问为立方几何?
    答曰:三十九尺、八分尺之七。
    22、少广:又有积一百九十三万七千五百四十一尺、二十七分尺之一十七。问为立方几何?
    答曰:一百二十四尺、太半尺。开立方术曰:置积为实。借一算步之,超二等。议所得,以再乘所借一算为法,而除之。除已,三之为定法。复除,折而下。以三乘所得数置中行。复借一算置下行。步之,中超一,下超二等。复置议,以一乘中,再乘下,皆副以加定法。以定法除。除已,倍下、并中从定法。复除,折下如前。开之不尽者,亦为不可开。若积有分者,通分内子为定实。定实乃开之,讫,开其母以报除。若母不可开者,又以母再乘定实,乃开之。讫,令如母而一。
    23、少广:今有积四千五百尺。问为立圆径几何?
    答曰:二十尺。
    24、少广:又有积一万六千四百四十八亿六千六百四十三万七千五百尺。问为立圆径几何?
    答曰:一万四千三百尺。开立圆术曰:置积尺数,以十六乘之,九而一,所得开立方除之,即丸径。

    展开全文
  • 九章算术卷第 少广

    2016-06-01 18:21:00
     少广术曰:置全步及分母子,以最下分母遍乘诸分子及全步,各以其母其子,置之于左。...术曰:下有半,是二分之一。以一为二,半为一,并之得,为法。置田二百十步,亦以一为二乘之,为实。...
    

    少广术曰:置全步及分母子,以最下分母遍乘诸分子及全步,各以其母除其子,置之于左。命通分者,又以分母遍乘诸分子,及已通者皆通而同之,并之为法。置所求步数,以全步积分乘之为实。实如法而一,得从步。


    〔一〕今有田广一步半。求田一亩,问从几何?答曰:一百六十步。
    术曰:下有半,是二分之一。以一为二,半为一,并之得三,为法。置田二百四十步,亦以一为二乘之,为实。实如法得从步。


    〔二〕今有田广一步半、三分步之一。求田一亩,问从几何?答曰:一百三十步、一十一分步之一十。
    术曰:下有三分,以一为六,半为三,三分之一为二,并之得一十一为法。置田二百四十步,亦以一为六乘之,为实。实如法得从步。


    〔三〕今有田广一步半、三分步之一、四分步之一。求田一亩,问从几何?答曰:一百一十五步、五分步之一。
    术曰:下有四分,以一为一十二,半为六,三分之一为四,四分之一为三,并之得二十五,以为法。置田二百四十步,亦以一为一十二乘之,为实。实如法而一,得从步。


    〔四〕今有田广一步半、三分步之一、四分步之一、五分步之一。求田一亩,问从几何?答曰:一百五步、一百三十七分步之一十五。
    术曰:下有五分,以一为六十,半为三十,三分之一为二十,四分之一为一十五,五分之一为一十二,并之得一百三十七,以为法。置田二百四十步,亦以一为六十乘之,为实。实如法得从步。


    〔五〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一。求田一亩,问从几何?答曰:九十七步、四十九分步之四十七。
    术曰:下有六分,以一为一百二十,半为六十,三分之一为四十,四分之一为三十,五分之一为二十四,六分之一为二十,并之得二百九十四以为法。置田二百四十步,亦以一为一百二十乘之,为实。实如法得从步。


    〔六〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一。求田一亩,问从几何?答曰:九十二步、一百二十一分步之六十八。
    术曰:下有七分,以一为四百二十,半为二百一十,三分之一为一百四十,四分之一为一百五,五分之一为八十四,六分之一为七十,七分之一为六十,并之得一千八十九,以为法。置田二百四十步,亦以一为四百二十乘之,为实。实如法得从步。


    〔七〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一。求田一亩,问从几何?答曰:八十八步、七百六十一分步之二百三十二。
    术曰:下有八分,以一为八百四十,半为四百二十,三分之一为二百八十,四分之一为二百一十,五分之一为一百六十八,六分之一为一百四十,七分之一为一百二十,八分之一为一百五,并之得二千二百八十三,以为法。置田二百四十步,亦以一为八百四十乘之,为实。实如法得从步。


    〔八〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一。求田一亩,问从几何?答曰:八十四步、七千一百二十九分步之五千九百六十四。
    术曰:下有九分,以一为二千五百二十,半为一千二百六十,三分之一为八百四十,四分之一为六百三十,五分之一为五百四,六分之一为四百二十,七分之一为三百六十,八分之一为三百一十五,九分之一为二百八十,并之得七千一百二十九,以为法。置田二百四十步,亦以一为二千五百二十乘之,为实。实如法得从步。


    〔九〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一。求田一亩,问从几何?答曰:八十一步、七千三百八十一分步之六千九百三十九。
    术曰:下有一十分,以一为二千五百二十,半为一千二百六十,三分之一为八百四十,四分之一为六百三十,五分之一为五百四,六分之一为四百二十,七分之一为三百六十,八分之一为三百一十五,九分之一为二百八十,十分之一为二百五十二,并之得七千三百八十一,以为法。置田二百四十步,亦以一为二千五百二十乘之,为实。实如法得从步。


    〔一0〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一、十一分步之一。求田一亩,问从几何?答曰:七十九步、八万三千七百一十一分步之三万九千六百三十一。
    术曰:下有一十一分,以一为二万七千七百二十,半为一万三千八百六十,三分之一为九千二百四十,四分之一为六千九百三十,五分之一为五千五百四十四,六分之一为四千六百二十,七分之一为三千九百六十,八分之一为三千四百六十五,九分之一为三千八十,一十分之一为二千七百七十二,一十一分之一为二千五百二十,并之得八万三千七百一十一,以为法。置田二百四十步,亦以一为二万七千七百二十乘之,为实。实如法得从步。


    〔一一〕今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一、十一分步之一、十二分步之一。求田一亩,问从几何?答曰:七十七步、八万六千二十一分步之二万九千一百八十三。
    术曰:下有一十二分,以一为八万三千一百六十,半为四万一千五百八十,三分之一为二万七千七百二十,四分之一为二万七百九十,五分之一为一万六千六百三十二,六分之一为一万三千八百六十,七分之一为一万一千八百八十,八分之一为一万三百九十五,九分之一为九千二百四十,一十分之一为八千三百一十六,十一分之一为七千五百六十,十二分之一为六千九百三十,并之得二十五万八千六十三,以为法。置田二百四十步,亦以一为八万三千一百六十乘之,为实。实如法得从步。


    〔一二〕今有积五万五千二百二十五步。问为方几何?答曰:二百三十五步。


    〔一三〕又有积二万五千二百八十一步。问为方几何?答曰:一百五十九步。


    〔一四〕又有积七万一千八百二十四步。问为方几何?答曰:二百六十八步。


    〔一五〕又有积五十六万四千七百五十二步、四分步之一。问为方几何?答曰:七百五十一步半。


    〔一六〕又有积三十九亿七千二百一十五万六百二十五步。问为方几何?答曰:六万三千二十五步。
    开方术曰:置积为实。借一算步之,超一等。议所得,以一乘所借一算为法,而以除。除已,倍法为定法。其复除。折法而下。复置借算步之如初,以复议一乘之,所得副,以加定法,以除。以所得副从定法。复除折下如前。若开之不尽者为不可开,当以面命之。若实有分者,通分内子为定实。乃开之,讫,开其母报除。若母不可开者,又以母乘定实,乃开之,讫,令如母而一。


    〔一七〕今有积一千五百一十八步、四分步之三。问为圆周几何?答曰:一百三十五步。


    〔一八〕今有积三百步。问为圆周几何?答曰:六十步。
    开圆术曰:置积步数,以十二乘之,以开方除之,即得周。


    〔一九〕今有积一百八十六万八百六十七尺。问为立方几何?答曰:一百二十三尺。


    〔二0〕今有积一千九百五十三尺、八分尺之一。问为立方几何?答曰:一十二尺半。


    〔二一〕今有积六万三千四百一尺、五百一十二分尺之四百四十七。问为立方几何?答曰:三十九尺、八分尺之七。


    〔二二〕又有积一百九十三万七千五百四十一尺、二十七分尺之一十七。问为立方几何?答曰:一百二十四尺、太半尺。
    开立方术曰:置积为实。借一算步之,超二等。议所得,以再乘所借一算为法,而除之。除已,三之为定法。复除,折而下。以三乘所得数置中行。复借一算置下行。步之,中超一,下超二等。复置议,以一乘中,再乘下,皆副以加定法。以定法除。除已,倍下、并中从定法。复除,折下如前。开之不尽者,亦为不可开。若积有分者,通分内子为定实。定实乃开之,讫,开其母以报除。若母不可开者,又以母再乘定实,乃开之。讫,令如母而一。


    〔二三〕今有积四千五百尺。问为立圆径几何?答曰:二十尺。


    〔二四〕又有积一万六千四百四十八亿六千六百四十三万七千五百尺。问为立圆径几何?答曰:一万四千三百尺。
    开立圆术曰:置积尺数,以十六乘之,九而一,所得开立方除之,即丸径。

    转载于:https://www.cnblogs.com/tigerisland/p/7564800.html

    展开全文
  • 五、对象存活的判断、垃圾回收算法6.1 标记 -清除算法6.2 复制算法6.3 标记-整理算法6.4 代收集算法七、垃圾收集器7.1 Serial收集器7.2 ParNew收集器7.3 Parallel收集器7.4 CMS收集器7.5 G1收集器G1对...
  • 选项字段之一是E比特,即OSPF短截标志。当E比特置0时,该路由关联的区域是一个短截区域,外部LSA不允许进入这个区域。  2.OSPF状态问题  成为邻居的路由器不保证交换链路状态更新。一旦路由器决定与一个邻居形成...
  • 用人生四分之一的时间来换取其余时间的幸福生活,这点苦不算啥。 第4章栈与队列 87 4.1开场白 88 想想看,在你准备用枪的时候,突然这手枪明明有子弹却打不出来,这不是要命吗。 4.2栈的定义 89 类似的很多软件,...
  • 遇到他,是我到美国求学的最大收获,亦是我人生最大的幸运之一。 我很早就知道这本《配器法教程》了。初次见到它我已有这样的打算:将来一定要把它翻译介绍到中国去。这本著作的影响遍及全世界:这次大家翻译的这本...
  • :《方田》 1、方田:今有田广十五步,从十六步。问为田几何? 答曰:亩。 2、方田:又有田广十二步,从十四步。问为田几何? 答曰:十八步。方田术曰:广从步数相乘得积步。...6、方田:又有九十一分之四十九。问
  • 成为当代最优秀的程序设计语言之一。 C语言的特点  C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于...
  • PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。 PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用...
  • Spark学习路 (十)SparkCore的调优资源调优JVM的GC垃圾收集器 目录、概述二、垃圾收集器(garbage collector (GC)) 是什么?、为什么需要GC?、为什么需要多种GC?五、对象存活的判断、...
  • 标记压缩算法种垃圾回收算法的小结五、代收集算法、增量收集算法和分区算法1、增量收集算法2、分区算法 、垃圾回收概述 1、什么是垃圾? ● 垃圾:指的是在运行中没有任何引用的对象(没有任
  • 宅基地申请书集锦.doc

    2021-01-18 16:37:03
     有下列情况之一的,不得安排宅基地用地: (一) 买卖、出租或以其他形式非法转让房屋的; (二) 违反计划生育超生的; () 一户一子(女)有一处宅基地的; () 户口已迁出的; (五) 年龄未满十八岁的; ()其它按...
  • 守岁:除夕守岁是最重要的年俗活动之一,守岁之俗由来已久。最早记载见于西晋周处的《风土志》:除夕之夜,各相与赠送,称为“馈岁”;酒食相邀,称为“别岁”;长幼聚饮,祝颂完备,称为“岁”;大家终夜不眠,以...
  • 文章目录前言、System.gc()二、内存溢出及内存泄漏2.1 内存溢出2.2 内存泄漏、STW、垃圾回收的并行与并发五、安全点、引用分类:6.1 强引用6.2 软引用 前言 呵呵~奇怪的小知识: 现在的手机所以变快,是...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    【北京理工大学 2001 、1(2)】 A.栈 B. 队列 C. 完全二叉树 D. 堆 16.连续存储设计时,存储单元的地址(A )。【中山大学 1999 、1(1)】 A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,...
  • 把有百多个单元格的列,变成页的多列 将N列变M列公式归纳为 列变列变列 重复次填充 多行数据排成列 将单元格列分为多列 首写字母大写 把单元格编号中的小写字母变成大写字母 让姓名左右对齐 ...
  • 9. 索引顺序文件是最常用的文件组织之一,通常用____结构来组织索引。【长沙铁道学院1998二、6(2)】 10. 倒排序文件的主要优点在于______。【山东工业大学1995一、3(1)】 11. 检索是为了在文件中寻找满足...
  • 网趣网上购物系统支持的级分类设置,后台可以轻松对商品进行分类的明细化设置,添加商品,可以方便得设置、二、级分类的属性,对于商品较少的购物站,用户也可以只用2级分类,使购物系统的适应人群弹性更强,...
  • 网趣商城ASP源码

    2013-02-17 17:11:35
    网趣网上购物系统支持的级分类设置,后台可以轻松对商品进行分类的明细化设置,添加商品,可以方便得设置、二、级分类的属性,对于商品较少的购物站,用户也可以只用2级分类,使购物系统的适应人群弹性更强,...
  • 2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; 3)统计各分数段的学生人数及所占的百分比。 提示:可考虑用两个维数组实现学生成绩和学生信息的存储。 (19)歌手大赛评分 某歌手大赛...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    把有百多个单元格的列,变成页的多列 将N列变M列公式归纳为 列变列变列 重复次填充 多行数据排成列 将单元格列分为多列 首写字母大写 把单元格编号中的小写字母变成大写字母 让姓名左右对齐 ...
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    之一 75 巧妙控制OfficeWord中的“孤行” 75 Word中表格快速一分为二: 75 在Excel中输入人名时使用“分散对齐” 77 之二 78 1、硬回车键的使用 78 2、使同行中选定的文字垂直提升或降低位置 78 3、给文档中的文字...
  • 【程序29】:用1、2、2、3、4、5这个数字,用java写个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第位,"3"与"5"不能相连。 【程序30】写个方法,用二查找法判断任意整数在...
  • 第五篇是“二次型与二次不定方程”在这一篇中关于二次型的特征的研究,标志着群特征标理论的肇始,使高斯成为群论的先驱者之一。 第篇把前面的理论应用到各种特殊情形,并引入了超越函数。 第七篇是“圆方程”...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 121
精华内容 48
关键字:

六分之一除三分之四