JVM方法常用的宏

Hotspot 垃圾回收之SafepointSynchronize(一) 源码解析 1、定义 2、os::serialize_thread_states /write_memory_serialize_page 3、TemplateInterpreter::notice_safepoints /ignore_safepoints 4、os::make_polling_page_unreadable /make_polling_page_readable 5、JavaThread::check_safepoint_and_suspend_for_native_trans 阅读详情

jdk版本是openjdk-7u6-fcs-src-b24-28_aug_2012

interfaceSupport.hpp

```c++
// Debug class instantiated in JRT_ENTRY and ITR_ENTRY macro.
// Can be used to verify properties on enter/exit of the VM.

#ifdef ASSERT
class VMEntryWrapper {
public:
VMEntryWrapper() {
    if (VerifyLastFrame) {
    InterfaceSupport::verify_last_frame();
    }
}

~VMEntryWrapper() {
    InterfaceSupport::check_gc_alot();
    if (WalkStackALot) {
    InterfaceSupport::walk_stack();
    }
#ifdef ENABLE_ZAP_DEAD_LOCALS
    if (ZapDeadLocalsOld) {
    InterfaceSupport::zap_dead_locals_old();
    }
#endif
#ifdef COMPILER2
    // This option is not used by Compiler 1
    if (StressDerivedPointers) {
    InterfaceSupport::stress_derived_pointers();
    }
#endif
    if (DeoptimizeALot || DeoptimizeRandom) {
    InterfaceSupport::deoptimizeAll();
    }
    if (ZombieALot) {
    InterfaceSupport::zombieAll();
    }
    if (UnlinkSymbolsALot) {
    InterfaceSupport::unlinkSymbols();
    }
    // do verification AFTER potential deoptimization
    if (VerifyStack) {
    InterfaceSupport::verify_stack();
    }

}
};


class VMNativeEntryWrapper {
public:
VMNativeEntryWrapper() {
    if (GCALotAtAllSafepoints) InterfaceSupport::check_gc_alot();
}

~VMNativeEntryWrapper() {
    if (GCALotAtAllSafepoints) InterfaceSupport::check_gc_alot();
}
};

#endif


// VM-internal runtime interface support

#ifdef ASSERT

class RuntimeHistogramElement : public HistogramElement {
public:
RuntimeHistogramElement(const char* name);
};

#define TRACE_CALL(result_type, header)                            \
InterfaceSupport::_number_of_calls++;                            \
if (TraceRuntimeCalls)                                           \
    InterfaceSupport::trace(#result_type, #header);                \
if (CountRuntimeCalls) {                                         \
    static RuntimeHistogramElement* e = new RuntimeHistogramElement(#header); \
    if (e != NULL) e->increment_count();                           \
}
#else
#define TRACE_CALL(result_type, header)                            \
/* do nothing */
#endif


// LEAF routines do not lock, GC or throw exceptions

#define VM_LEAF_BASE(result_type, header)                            \
TRACE_CALL(result_type, header)                                    \
debug_only(NoHandleMark __hm;)                                     \
os::verify_stack_alignment();                                      \
/* begin of body */


// ENTRY routines may lock, GC and throw exceptions

#define VM_ENTRY_BASE(result_type, header, thread)                   \
TRACE_CALL(result_type, header)                                    \
HandleMarkCleaner __hm(thread);                                    \
Thread* THREAD = thread;                                           \
os::verify_stack_alignment();                                      \
/* begin of body */


// QUICK_ENTRY routines behave like ENTRY but without a handle mark

#define VM_QUICK_ENTRY_BASE(result_type, header, thread)             \
TRACE_CALL(result_type, header)                                    \
debug_only(NoHandleMark __hm;)                                     \
Thread* THREAD = thread;                                           \
os::verify_stack_alignment();                                      \
/* begin of body */


// Definitions for IRT (Interpreter Runtime)
// (thread is an argument passed in to all these routines)

#define IRT_ENTRY(result_type, header)                               \
result_type header {                                               \
    ThreadInVMfromJava __tiv(thread);                                \
    VM_ENTRY_BASE(result_type, header, thread)                       \
    debug_only(VMEntryWrapper __vew;)


#define IRT_LEAF(result_type, header)                                \
result_type header {                                               \
    VM_LEAF_BASE(result_type, header)                                \
    debug_only(No_Safepoint_Verifier __nspv(true);)


#define IRT_ENTRY_NO_ASYNC(result_type, header)                      \
result_type header {                                               \
    ThreadInVMfromJavaNoAsyncException __tiv(thread);                \
    VM_ENTRY_BASE(result_type, header, thread)                       \
    debug_only(VMEntryWrapper __vew;)

#define IRT_END }


// Definitions for JRT (Java (Compiler/Shared) Runtime)

#define JRT_ENTRY(result_type, header)                               \
result_type header {                                               \
    ThreadInVMfromJava __tiv(thread);                                \
    VM_ENTRY_BASE(result_type, header, thread)                       \
    debug_only(VMEntryWrapper __vew;)


#define JRT_LEAF(result_type, header)                                \
result_type header {                                               \
VM_LEAF_BASE(result_type, header)                                  \
debug_only(JRT_Leaf_Verifier __jlv;)


#define JRT_ENTRY_NO_ASYNC(result_type, header)                      \
result_type header {                                               \
    ThreadInVMfromJavaNoAsyncException __tiv(thread);                \
    VM_ENTRY_BASE(result_type, header, thread)                       \
    debug_only(VMEntryWrapper __vew;)

// Same as JRT Entry but allows for return value after the safepoint
// to get back into Java from the VM
#define JRT_BLOCK_ENTRY(result_type, header)                         \
result_type header {                                               \
    TRACE_CALL(result_type, header)                                  \
    HandleMarkCleaner __hm(thread);

#define JRT_BLOCK                                                    \
    {                                                                \
    ThreadInVMfromJava __tiv(thread);                                \
    Thread* THREAD = thread;                                         \
    debug_only(VMEntryWrapper __vew;)

#define JRT_BLOCK_END }

#define JRT_END }

// Definitions for JNI

#define JNI_ENTRY(result_type, header)                               \
    JNI_ENTRY_NO_PRESERVE(result_type, header)                       \
    WeakPreserveExceptionMark __wem(thread);

#define JNI_ENTRY_NO_PRESERVE(result_type, header)             \
extern "C" {                                                         \
result_type JNICALL header {                                \
    JavaThread* thread=JavaThread::thread_from_jni_environment(env); \
    assert( !VerifyJNIEnvThread || (thread == Thread::current()), "JNIEnv is only valid in same thread"); \
    ThreadInVMfromNative __tiv(thread);                              \
    debug_only(VMNativeEntryWrapper __vew;)                          \
    VM_ENTRY_BASE(result_type, header, thread)


// Ensure that the VMNativeEntryWrapper constructor, which can cause
// a GC, is called outside the NoHandleMark (set via VM_QUICK_ENTRY_BASE).
#define JNI_QUICK_ENTRY(result_type, header)                         \
extern "C" {                                                         \
result_type JNICALL header {                                \
    JavaThread* thread=JavaThread::thread_from_jni_environment(env); \
    assert( !VerifyJNIEnvThread || (thread == Thread::current()), "JNIEnv is only valid in same thread"); \
    ThreadInVMfromNative __tiv(thread);                              \
    debug_only(VMNativeEntryWrapper __vew;)                          \
    VM_QUICK_ENTRY_BASE(result_type, header, thread)


#define JNI_LEAF(result_type, header)                                \
extern "C" {                                                         \
result_type JNICALL header {                                \
    JavaThread* thread=JavaThread::thread_from_jni_environment(env); \
    assert( !VerifyJNIEnvThread || (thread == Thread::current()), "JNIEnv is only valid in same thread"); \
    VM_LEAF_BASE(result_type, header)


// Close the routine and the extern "C"
#define JNI_END } }



// Definitions for JVM

#define JVM_ENTRY(result_type, header)                               \
extern "C" {                                                         \
result_type JNICALL header {                                       \
    JavaThread* thread=JavaThread::thread_from_jni_environment(env); \
    ThreadInVMfromNative __tiv(thread);                              \
    debug_only(VMNativeEntryWrapper __vew;)                          \
    VM_ENTRY_BASE(result_type, header, thread)


#define JVM_ENTRY_NO_ENV(result_type, header)                        \
extern "C" {                                                         \
result_type JNICALL header {                                       \
    JavaThread* thread = (JavaThread*)ThreadLocalStorage::thread();  \
    ThreadInVMfromNative __tiv(thread);                              \
    debug_only(VMNativeEntryWrapper __vew;)                          \
    VM_ENTRY_BASE(result_type, header, thread)


#define JVM_QUICK_ENTRY(result_type, header)                         \
extern "C" {                                                         \
result_type JNICALL header {                                       \
    JavaThread* thread=JavaThread::thread_from_jni_environment(env); \
    ThreadInVMfromNative __tiv(thread);                              \
    debug_only(VMNativeEntryWrapper __vew;)                          \
    VM_QUICK_ENTRY_BASE(result_type, header, thread)


#define JVM_LEAF(result_type, header)                                \
extern "C" {                                                         \
result_type JNICALL header {                                       \
    VM_Exit::block_if_vm_exited();                                   \
    VM_LEAF_BASE(result_type, header)


#define JVM_END } }

#endif // SHARE_VM_RUNTIME_INTERFACESUPPORT_HPP
```
JVM 调优常用命令 如果您觉得有用的话,记得给,写作不易啊^ _ ^。而且听说,实在白嫖的话,那欢迎常来啊!!! 阅读详情

相关推荐

core_analyzer分析c++程序内存占用

环境:centos; 进程:单进程多线程c++程序; 问题:1. 分析系统内存占用; 2. 分析ptmalloc内存空洞(bins上的空闲chunk的大小); 包括:1. 占用了很大内存的c++进程; 2. gcore(在进程不core dump的情况下生成core文件); 3. core_analyzer(分析gcor...

weixin_41644391的博客 4811

JVM系列(四):java方法的查找过程实现

如上一篇系列文章中讲到的,jdk执行的核心方法,实际上也是调用jvm或者hotspot的接口方法实现的,这其中有个重要变量,供jdk使用。即:JNIEnv* env 。可见其重要性。我们再来回顾下它的初始化过程。 复制代码 //实际上,我们可以通过前面对 JNIEnv penv 的赋值中查到端倪: // hotspot/src/share/vm/prims/jni.cpp … // 将jvm信息存储到 penv 中,以备外部使用 (JNIEnv)penv = thread->jni_environme

weixin_45032957的博客 440

车载导航测试,面试常见问题

车载导航测试是汽车软件测试的重要组成部分,涉及验证导航系统的功能、性能、可靠性和用户体验。在面试中,面试官通常会考察候选人的测试思维、问题解决能力和实际经验。以下我将从常见问题类别入手,逐步介绍面试中的高频问题,并提供结构化分析。通过以上结构化准备,你能在面试中自信应对车载导航测试相关问题。用户体验测试关注界面友好性和交互流畅性,安全测试则涉及功能安全和数据隐私。功能测试聚焦于导航核心功能的正确性,如路线规划、位置定位和地图显示。面试官会考察你如何识别、报告和跟踪缺陷,以及熟悉测试工具。

m0_69889939的博客 526

JVM_ENTRY和JVM_END

JVM_ENTRY和JVM_END解析 在阅读JVM源码的时候我们会经常碰到JVM_ENTRY和JVM_END,JVM_ENTRY和JVM_END是Hotspot源码中经常出现的宏定义,其功能是将一些需要重复编写的事务性代码提取了出来,如处理接口返回值类型,JNI声明、获取当前线程和调试开关等。 下面我们具体分析下JVM_ENTRY和JVM_END的功能: 源码 这里以openjdk7为例,JVM_ENTRY和JVM_END的定义位于文件hotspot/src/share/vm/runtime/interf

u011929241的博客 842

Vc出现不能连接到一个或多个 vCenter server 系统:http://vcenter-vx.utibet.edu.cn:443/sdk

问题描述: 解决办法: esxi6.7的bug 第一种通过升级系统来解决问题 第二种是通过删除数据来解决 第一步:进入到esxi的shell 第二步查看其中的服务开启状态 第二步 df -h 第三步 /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres 第四步 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oi

m0_49328536的博客 9899

Win10离线安装.net framework 3.5全攻略:镜像匹配与DISM命令实战(附错误0x8024402c解决方案)

本文详细解析了在Windows 10系统中离线安装.NET Framework 3.5的完整流程与核心难点。重点阐述了如何精准匹配系统版本与安装镜像,并提供了使用DISM命令进行离线安装的实战步骤。针对常见的错误代码0x8024402c,文章深入剖析了其根源,并给出了系统级的排查与解决方案,特别适合企业内网运维人员参考。

weixin_29299807的博客 659

java 源码阅读(一)

#include <stdio.h> #define JRT_ENTRY(result_type , header) \ result_type header { \ printf("%d" , 3); #define JRT_END } class _jobject {}; #include "Header.h" JRT_ENTRY(int ...

p312011150的博客 250

岭回归的MATLAB步骤

MATLAB 实现框架,它涵盖了从数据导入到岭回归的步骤,包括计算共线性、使用 MAE、MSE、R²、MAPE 进行评价,以及绘制相应的可视化图表。

subject625Ruben的博客 1089

Java源码阅读的真实体会

刚才在论坛不经意间,看到有关源码阅读的[url=http://www.iteye.com/topic/854647]帖子[/url]。回想自己前几年,阅读源码那种兴奋和成就感([url=http://www.iteye.com/topic/80532]1[/url]),不禁又有一种激动。 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。 说到技术基础,我打个比方吧,如果你从来没...

zwchen的专栏 3033

openmediavault(OMV) (1)安装部署

EXT3(Third Extended File System): EXT3 是 Linux 中广泛使用的日志文件系统,是 EXT2 文件系统的升级版本。这里可以根据自己的需求进行设置,目前只设置了自动登出为1天,为方便后续配置使用,其他设置可根据自己的具体需求进行设置。通过cd 命令进入到我们的raid存储中,通过ls发现里面没有任何的数据,因为我们的raid存储中还未创建任何数据。我的系统要安装在100G的磁盘上,故选择100G的磁盘,实际可以根据具体情况选择。

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺的博客 2168

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

weixin_45735391的博客 3万+

JVM常用调优方法

一、常用调优方法 1、将新对象预留在新生代 由于 Full GC 的成本要远远高于 Minor GC ,因此尽可能将对象分配在新生代,在JVM 调优中,可以为应用程序分配一个合理的新生代空间,以最大限度避免新对象直接进去老年代。 注意:由于新生代垃圾回收的速度高于老年代回收,因此,将年轻对象预留在新生代有利于提高整体的 GC 效率 2、大对象进入老年代 大对象占用空间多,直接放入...

大龙的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JVM常用调优参数 ——JVM篇

JVM常用性能调优参数详解 ​ 在学习完整个JVM内容后,其实目标不仅是学习了解整个JVM的基础知识,而是为了进行JVM性能调优做准备,所以以下的内容就是来说说JVM性能调优的知识。 一、性能调优 ​ 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等等。 ​ 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行: 明确优化目标 发现性能瓶颈 性能调优 通过监控及数据统计工具获得数据 确认是否达到目标 二、何时进

YING—country的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JVM调优--常用JVM监控工具使用

在实际工作中,在进行jvm调优或者分析内存泄露、溢出等问题时,熟练掌握JVM常用的监控工具能够帮助更快地定位问题所在,目前记录一下使用过的常用的jvm监控工具以及其使用、和对应分析过程。 查看jvm使用的垃圾回收器 在开始了jvm调优或者内存问题分析时,我们首先要了解的就是JVM使用垃圾回收器是什么,才能结合监控工具,做出正确的结果分析。那么如何查看JVM运行时使用的垃圾回收器是什么? 如果在...

嘎嘎的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JVM常用命令

官方文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html 常用 JVM 参数: -Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制 -Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 -Xmn:新生代

Pluto372的博客 6836

JVM常用指令

1、jps jps(java process status tool), 用于查看java进程及相关信息,如果你想找到一个java进程的pid,可以使用jps命令代替linux的ps命令。 命令格式: jps 【options】 【hostid】 options参数: -l : 显示进程ID, 显示主类全名或jar路径 -q :显示进程ID -m :显示进程ID, 显示JVM启动时传给main() 函数的参数 -v : 显示进程ID,显示JVM启动参数 hostid : 主机或其他服务器IP

zhoushimiao1990的博客 6117

JVM方法区详解

线程共享角度来分析运行时数据区 栈,堆,方法区的交互

勇心在馨 8083

【JVM】常用命令

Java虚拟机(JVM)是Java程序运行的基础设施,它负责将Java字节码转换为本地机器代码并执行。在开发过程中,我们经常需要使用一些命令来监控和管理JVM的性能和状态。本文将详细介绍6个常用的JVM命令:jps、jstat、jmap、jhat、jstack和jinfo。

weixin_40381772的博客 4545

Java JVM常用参数

对Java JVM基本参数类型与简单使用,予以记录!

qq_43357394的博客 5067

常用的JVM命令

jps jstat -gcutil PID 1000 jinfo -flag UseTLAB PID ps -ef|grep java|tr ' ' '\n'|grep '\-X' --color // 远程机器 sudo -iu sankuai tar -czf heap_trace.txt.tar.gz heap_trace.txt sftp chenmengmeng@jumper.sankuai.com sftp> put heap_trace.txt.tar.gz ls...

风暴计划 1373

JVM常用分析工具

JDK的bin目录中有“java.exe”、 “javac.exe”这两个命令行工具,但bin目录之中还有很多其他命令行程序,这些工具非常强大可以用于监视虚拟机和故障处理。 工具名称 作用描述 jps.exe JVM进程状态工具(JVM Process Status Tool),用于显示目标系统上JVM的Java进程信息。 jstat.exe ...

风中飘雪 2348

JVM 参数详解:从常用到一般常用的配置分析

JVM 参数的选择和配置对应用的性能表现至关重要。对于大多数应用而言,堆内存设置、GC 策略和栈大小是最常用且最直接影响应用稳定性的参数。GC 日志和逃逸分析等调试参数则适用于性能调优和问题排查。在特定应用场景中,结合业务需求和硬件资源,合理选择 JVM 参数,能够让 Java 应用运行得更高效、稳定。JVM 提供的参数非常丰富,开发者在使用时应根据实际情况进行测试和调优。通过深入理解 JVM 参数的作用,我们可以更好地掌控 Java 应用的运行时行为,最大化地发挥系统性能。

m0_38053034的博客 1429
上一篇: java native调用
下一篇: Java线程源码解析之yield和sleep
DViewer
博客等级 码龄16年 16粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值