`
xieyj
  • 浏览: 102693 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

openjdk的周期线程

阅读更多

        openjdk中周期线程为WatcherThread,在

        jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {

               ............

               if (PeriodicTask::num_tasks() > 0) {
                        WatcherThread::start(); //启动周期线程
                }

               .............

        }

         看看WatcherThread构造函数

         WatcherThread::WatcherThread() : Thread() {
                 if (os::create_thread(this, os::watcher_thread)) {//此步仅创建线程,并不自动运行
                         _watcher_thread = this;

                         os::set_priority(this, MaxPriority);
                         if (!DisableStartThread) {
                                    os::start_thread(this); //运行刚创建的线程
                         }
                }
          }

          由前文《java.lang.Thread.start》可知,在start之后将运行WatcherThread::run方法。

          void WatcherThread::run() {

                    .........

                    while(!_should_terminate) {

                              const size_t time_to_wait = PeriodicTask::time_to_wait(); //计算下一个任务所需等待的最小时间
                              os::sleep(this, time_to_wait, false);

                              //上面的等待其实和linux操作系统的定时任务原理一样,只不过操作系统是根据更低层的时间节拍来计算。

                              .........

                              PeriodicTask::real_time_tick(time_to_wait);//在PeriodicTask中调用任务

                              //没有任务,退出,个人感觉没有任务等待应该更好,不知道为何这样设计

                              if (PeriodicTask::num_tasks() == 0) {
                                     _should_terminate = true;
                              }

                     }

          }

          void PeriodicTask::real_time_tick(size_t delay_time) {

                   ...........

                   for(int index = 0; index < _num_tasks; index++) {

                            _tasks[index]->execute_if_pending(delay_time); //执行任务

                   }

          }

         加入任务队列,是通过下面的方法

         void PeriodicTask::enroll() {
                  if (_num_tasks == PeriodicTask::max_tasks)
                  fatal("Overflow in PeriodicTask table");
                  _tasks[_num_tasks++] = this;
         }

1
0
分享到:
评论

相关推荐

    openjdk7u源码

    5. **并发与多线程**:"java.util.concurrent"包提供了高级并发工具,而"src/hotspot/share/prims/jvmti"目录下的代码则实现了Java虚拟机接口(JVMTI),它允许工具与JVM进行交互,如调试、监控和性能分析。...

    openjdk-8u40-src-b25-10_feb_2015

    4. **内存管理**:学习Java对象的生命周期,理解垃圾收集的算法和策略。 5. **性能调优**:通过阅读源码,了解如何利用JDK提供的工具进行性能分析和调优。 6. **安全性**:深入理解Java的安全模型,包括类加载器、...

    openjdk hotspot源码

    7. **线程和同步**:Hotspot实现了Java多线程模型,包括线程创建、调度、同步原语(如锁和条件变量)等。 8. **动态适应性**:Hotspot可以监测运行时行为,根据数据调整优化策略,如适应性运行时系统(Adaptive ...

    openjdk-1.6.0.41-src.x86_64

    例如,`sun.misc.Launcher$AppClassLoader`继承自`URLClassLoader`,并实现了类加载的逻辑,这使得我们有机会深入了解类加载的生命周期。 在文件列表中,我们可以看到`sun`、`javax`、`com`、`launcher`等目录,...

    java+多线程+同步详解源码整理

    2. **线程的生命周期** 线程有五种状态:新建、就绪、运行、阻塞和死亡。Java的`Thread`类提供了控制线程的方法,如`start()`启动线程,`join()`等待线程结束,`sleep()`使线程暂停执行等。 3. **线程同步** 在多...

    openjdk-6-src-b27-26_oct_2012

    分析它们的源码,有助于理解Java程序的生命周期管理。 4. **JDK工具**:如jconsole、jvisualvm等,这些工具用于监控和诊断Java应用程序。源码中包含这些工具的实现,可以让我们了解如何利用JMX(Java Management ...

    JDK8 底层C++源码 OpenJDK8(包含JDK8及hotspot)

    1. **类加载器**:理解如何加载和验证类文件,以及类的生命周期管理。 2. **垃圾收集器**:包括新生代、老年代的内存管理,如何触发垃圾收集,以及不同垃圾收集策略(如CMS、G1、ZGC等)的实现。 3. **即时编译...

    jdk8u_x64_25.71-b00

    标题“jdk8u_x64_25.71-b00”指的是Oracle JDK 8更新版的一个64位版本,这里的“8u”代表JDK 8,“x64”表示该版本适用于64位操作系统,而“25.71-b00”是版本号,通常“25”代表第25个更新周期,“71”可能是内部...

    jvm技术精华-架构师必备

    - Java虚拟机栈是线程私有的,其生命周期与线程相同。每当一个线程开始执行时,虚拟机就会为该线程创建一个栈,用于存储线程的局部变量表、操作数栈、动态链接信息以及方法退出信息等。 - 局部变量表用于存放方法...

    Java 开发语言 open jdk8

    - **更新策略**:Oracle JDK有更频繁的更新周期,包括长期支持版本(LTS)和非LTS版本,而OpenJDK主要遵循Java SE规范的发布节奏。 3. **JVM优化** - **HotSpot虚拟机**:OpenJDK 8中使用的JVM,具有即时编译...

    什么是Java虚拟机

    - **具体实现**:根据规范创建的实际JVM,例如HotSpot JVM或OpenJDK JVM等。 - **运行实例**:每当运行一个Java程序,就会启动一个JVM实例,执行程序直到结束。 2. **Java虚拟机的生命周期** - JVM的启动始于`...

    jprofiler工具

    1. **内存分析**:JProfiler可以详细追踪内存分配,检测内存泄漏,通过对象生存周期分析来确定哪些对象被长时间持有,导致内存无法释放。 2. **CPU Profiling**:实时监控和分析Java应用程序的CPU使用情况,展示...

    Java基础面试题.pdf

    Oracle JDK可能会有更快的更新周期和更好的性能优化,但OpenJDK的开放性使其更适合社区协作和定制化需求。 在面试中,理解这些基础知识是至关重要的。此外,深入理解垃圾回收、并发模型、设计模式、集合框架、IO流...

    JDK10(JDK10底层C++源码及hotspot虚拟机源码)

    **JDK10与OpenJDK10源码解析** JDK10是Java开发工具包的第十个主要版本,它的发布标志着Java平台的持续进化。这个版本引入了许多新的特性和改进,旨在提升性能、易用性和开发者的生产力。本文将深入探讨JDK10的底层...

    深入JAVA虚拟机随书光盘

    10. **JVM与最新技术的结合**:现代JVM如OpenJDK和Oracle JDK持续发展,引入了如Project Jigsaw(模块系统)、Project Panama(Native Interface改进)等新技术,了解这些新特性如何影响JVM,能让你保持技术的前沿性...

    非常好用的java调优工具Jprofile

    JProfiler是一款跨平台的Java性能分析器,它支持Java虚拟机(JVM)的各种版本,包括Oracle JDK、OpenJDK等。JProfiler通过JVM的代理模式连接到运行中的Java应用,提供实时的性能监控和分析,包括CPU使用率、内存分配...

    整理-JVM相关面试题2024

    - **内存溢出**:通常由于对象生命周期管理不当导致。 - **性能问题**:如GC频繁、响应时间过长等问题。 - **线程死锁**:由于线程间的同步问题引起。 ### 总结 JVM是Java开发中一个非常重要的概念,理解其内部机制...

    Java中高级核心知识全面解析(精华必看)

    小程序(Applet)是嵌入到HTML网页中的Java程序,它们的生命周期和运行方式与应用程序不同。 **1.2 Java语法** Java语法包括变量、数据类型、控制结构、类和对象等。例如,字符型常量和字符串常量的区别在于,字符...

    JAVA核心面试知识梳理大全.pdf

    在JVM中,内存被划分为不同的区域,每个区域都有其特定的功能和生命周期。线程是JVM执行代码的基本单位,每个线程都有自己独立的程序计数器、虚拟机栈和本地方法栈。程序计数器记录当前线程正在执行的指令地址;...

    Java常见基础知识点.md

    OpenJDK拥有更快的迭代周期,引入新特性的速度更快。 - **性能差异**:早期版本中Oracle JDK在某些场景下的性能优于OpenJDK,但随着时间的发展,两者之间的差距逐渐缩小。 #### Java与C++的异同 - **内存管理**:...

Global site tag (gtag.js) - Google Analytics