We use a special cache of the pointers, so that we can later tell which ones were created before NMT was initialized, so that we know which have NMT header, so that we know how to free them.
The pattern of malloc/free seems to be always the same (I ran HelloWorld, J2Demo and SwingSet2). We can possibly take advantage of that.
There are 2 threads involved, but those are used sequentially and always in the same order at the same call, so for all purposes it is virtually single threaded behavior.
Investigate...
Here is the pattern:
MALLOC( 32) 1
MALLOC( 32) 2
MALLOC( 32) 3
MALLOC( 32) 4
MALLOC( 32) 5
MALLOC( 32) 6
MALLOC( 56) 7
MALLOC( 24) 8
MALLOC( 56) 9
MALLOC( 24) 10
MALLOC( 56) 11
MALLOC( 24) 12
MALLOC( 56) 13
MALLOC( 24) 14
MALLOC( 80) 15
MALLOC( 80) 16
MALLOC( 56) 17
MALLOC( 8) 18
MALLOC( 40) 19
MALLOC( 40) 20
MALLOC( 56) 21
MALLOC( 560) 22
MALLOC( 56) 23
MALLOC( 560) 24
MALLOC( 800) 25
MALLOC( 800) 26
MALLOC( 800) 27
MALLOC( 8192) 28
MALLOC( 56) 29
MALLOC( 80) 30
MALLOC( 56) 31
MALLOC( 40) 32
MALLOC( 56) 33
MALLOC( 72) 34
MALLOC( 32) 35
MALLOC( 32) 36
MALLOC( 32) 37
MALLOC( 32) 38
MALLOC( 32) 39
MALLOC( 32) 40
MALLOC( 24) 41
MALLOC( 96) 42
MALLOC( 13) 43
MALLOC( 8) 44
MALLOC( 72) 45
MALLOC( 8) 46
MALLOC( 32) 47
MALLOC( 35) 48
MALLOC( 27) 49
MALLOC( 32) 50
MALLOC( 29) 51
MALLOC( 16) 52
MALLOC( 32) 53
MALLOC( 25) 54
MALLOC( 13) 55
MALLOC( 32) 56
MALLOC( 10) 57
MALLOC( 10) 58
MALLOC( 32) 59
MALLOC( 20) 60
MALLOC( 13) 61
MALLOC( 32) 62
MALLOC( 22) 63
MALLOC( 32) 64
MALLOC( 18) 65
MALLOC( 32) 66
MALLOC( 10) 67
MALLOC( 32) 68
MALLOC( 1) 69
MALLOC( 16) 70
MALLOC( 32) 71
MALLOC( 27) 72
MALLOC( 1175) 73
MALLOC( 94) 74
MALLOC( 90) 75
MALLOC( 102) 76
MALLOC( 102) 77
FREE( 112) 0
MALLOC( 147) 78
MALLOC( 144) 79
FREE( 160) 1
MALLOC( 240) 80
FREE( 1536) 2
MALLOC( 32) 81
MALLOC( 19) 82
MALLOC( 29) 83
MALLOC( 32) 84
MALLOC( 3) 85
MALLOC( 30) 86
MALLOC( 32) 87
MALLOC( 19) 88
MALLOC( 15) 89
MALLOC( 224) 90
MALLOC( 224) 91
MALLOC( 16) 92
MALLOC( 24) 93
MALLOC( 24) 94
MALLOC( 24) 95
MALLOC( 24) 96
MALLOC( 24) 97
MALLOC( 24) 98
MALLOC( 24) 99
MALLOC( 24) 100
MALLOC( 24) 101
MALLOC( 24) 102
MALLOC( 24) 103
MALLOC( 24) 104
MALLOC( 24) 105
MALLOC( 24) 106
MALLOC( 24) 107
MALLOC( 24) 108
MALLOC( 24) 109
MALLOC( 24) 110
MALLOC( 24) 111
MALLOC( 24) 112
MALLOC( 24) 113
MALLOC( 24) 114
MALLOC( 24) 115
MALLOC( 24) 116
MALLOC( 24) 117
MALLOC( 24) 118
MALLOC( 24) 119
MALLOC( 24) 120
MALLOC( 24) 121
MALLOC( 24) 122
MALLOC( 24) 123
MALLOC( 24) 124
MALLOC( 24) 125
MALLOC( 24) 126
MALLOC( 24) 127
MALLOC( 24) 128
MALLOC( 24) 129
MALLOC( 24) 130
MALLOC( 24) 131
MALLOC( 24) 132
MALLOC( 24) 133
MALLOC( 24) 134
MALLOC( 24) 135
MALLOC( 24) 136
MALLOC( 24) 137
MALLOC( 24) 138
MALLOC( 24) 139
MALLOC( 24) 140
MALLOC( 24) 141
MALLOC( 24) 142
MALLOC( 24) 143
MALLOC( 24) 144
MALLOC( 24) 145
MALLOC( 24) 146
MALLOC( 24) 147
MALLOC( 24) 148
MALLOC( 24) 149
MALLOC( 24) 150
MALLOC( 24) 151
MALLOC( 24) 152
MALLOC( 24) 153
MALLOC( 24) 154
MALLOC( 24) 155
MALLOC( 24) 156
MALLOC( 24) 157
MALLOC( 24) 158
MALLOC( 24) 159
MALLOC( 24) 160
MALLOC( 24) 161
MALLOC( 24) 162
MALLOC( 24) 163
MALLOC( 24) 164
MALLOC( 24) 165
MALLOC( 24) 166
MALLOC( 24) 167
MALLOC( 24) 168
MALLOC( 24) 169
MALLOC( 24) 170
MALLOC( 24) 171
MALLOC( 24) 172
MALLOC( 24) 173
MALLOC( 24) 174
MALLOC( 24) 175
MALLOC( 24) 176
MALLOC( 24) 177
MALLOC( 24) 178
MALLOC( 24) 179
MALLOC( 24) 180
MALLOC( 24) 181
MALLOC( 24) 182
MALLOC( 24) 183
MALLOC( 24) 184
MALLOC( 24) 185
MALLOC( 24) 186
MALLOC( 24) 187
MALLOC( 24) 188
MALLOC( 24) 189
MALLOC( 24) 190
MALLOC( 24) 191
MALLOC( 24) 192
MALLOC( 24) 193
MALLOC( 24) 194
MALLOC( 24) 195
MALLOC( 24) 196
MALLOC( 24) 197
MALLOC( 24) 198
MALLOC( 24) 199
MALLOC( 24) 200
MALLOC( 24) 201
MALLOC( 24) 202
MALLOC( 24) 203
MALLOC( 24) 204
MALLOC( 24) 205
MALLOC( 24) 206
MALLOC( 24) 207
MALLOC( 24) 208
MALLOC( 24) 209
MALLOC( 24) 210
MALLOC( 24) 211
MALLOC( 24) 212
MALLOC( 24) 213
MALLOC( 24) 214
MALLOC( 24) 215
MALLOC( 24) 216
MALLOC( 24) 217
MALLOC( 24) 218
MALLOC( 24) 219
MALLOC( 24) 220
MALLOC( 24) 221
MALLOC( 24) 222
MALLOC( 24) 223
MALLOC( 24) 224
MALLOC( 24) 225
MALLOC( 24) 226
MALLOC( 24) 227
MALLOC( 24) 228
MALLOC( 24) 229
MALLOC( 24) 230
MALLOC( 24) 231
MALLOC( 24) 232
MALLOC( 24) 233
MALLOC( 24) 234
MALLOC( 24) 235
MALLOC( 24) 236
MALLOC( 24) 237
MALLOC( 24) 238
MALLOC( 24) 239
MALLOC( 24) 240
MALLOC( 24) 241
MALLOC( 24) 242
MALLOC( 24) 243
MALLOC( 24) 244
MALLOC( 24) 245
MALLOC( 24) 246
MALLOC( 24) 247
MALLOC( 24) 248
MALLOC( 24) 249
MALLOC( 24) 250
MALLOC( 24) 251
MALLOC( 24) 252
MALLOC( 24) 253
MALLOC( 24) 254
MALLOC( 24) 255
MALLOC( 24) 256
MALLOC( 24) 257
MALLOC( 24) 258
MALLOC( 24) 259
MALLOC( 24) 260
MALLOC( 24) 261
MALLOC( 24) 262
MALLOC( 24) 263
MALLOC( 24) 264
MALLOC( 24) 265
MALLOC( 24) 266
MALLOC( 24) 267
MALLOC( 24) 268
MALLOC( 24) 269
MALLOC( 24) 270
MALLOC( 24) 271
MALLOC( 24) 272
MALLOC( 24) 273
MALLOC( 24) 274
MALLOC( 24) 275
MALLOC( 24) 276
MALLOC( 24) 277
MALLOC( 24) 278
MALLOC( 24) 279
MALLOC( 24) 280
MALLOC( 24) 281
MALLOC( 24) 282
MALLOC( 24) 283
MALLOC( 24) 284
MALLOC( 24) 285
MALLOC( 24) 286
MALLOC( 24) 287
MALLOC( 24) 288
MALLOC( 24) 289
MALLOC( 24) 290
MALLOC( 24) 291
MALLOC( 24) 292
MALLOC( 24) 293
MALLOC( 24) 294
MALLOC( 24) 295
MALLOC( 24) 296
MALLOC( 24) 297
MALLOC( 24) 298
MALLOC( 24) 299
MALLOC( 24) 300
MALLOC( 24) 301
MALLOC( 24) 302
MALLOC( 24) 303
MALLOC( 24) 304
MALLOC( 24) 305
MALLOC( 24) 306
MALLOC( 24) 307
MALLOC( 24) 308
MALLOC( 24) 309
MALLOC( 24) 310
MALLOC( 24) 311
MALLOC( 24) 312
MALLOC( 24) 313
MALLOC( 24) 314
MALLOC( 24) 315
MALLOC( 24) 316
MALLOC( 24) 317
MALLOC( 24) 318
MALLOC( 24) 319
MALLOC( 24) 320
MALLOC( 24) 321
MALLOC( 24) 322
MALLOC( 24) 323
MALLOC( 24) 324
MALLOC( 24) 325
MALLOC( 24) 326
MALLOC( 24) 327
MALLOC( 24) 328
MALLOC( 24) 329
MALLOC( 24) 330
MALLOC( 24) 331
MALLOC( 24) 332
MALLOC( 24) 333
MALLOC( 24) 334
MALLOC( 24) 335
MALLOC( 24) 336
MALLOC( 24) 337
MALLOC( 24) 338
MALLOC( 24) 339
MALLOC( 24) 340
MALLOC( 24) 341
MALLOC( 24) 342
MALLOC( 24) 343
MALLOC( 24) 344
MALLOC( 24) 345
MALLOC( 24) 346
MALLOC( 24) 347
MALLOC( 24) 348
MALLOC( 24) 349
MALLOC( 24) 350
MALLOC( 24) 351
MALLOC( 24) 352
MALLOC( 24) 353
MALLOC( 24) 354
MALLOC( 24) 355
MALLOC( 24) 356
MALLOC( 24) 357
MALLOC( 24) 358
MALLOC( 16) 359
FREE( 16) 3
MALLOC( 16) 360
MALLOC( 32) 361
FREE( 16) 4
MALLOC( 64) 362
FREE( 32) 5
MALLOC( 128) 363
FREE( 64) 6
MALLOC( 20) 364
FREE( 32) 7
MALLOC( 8) 365
MALLOC( 33) 366
MALLOC( 8) 367
MALLOC( 16) 368
MALLOC( 89) 369
FREE( 16) 8
FREE( 16) 9
MALLOC( 17) 370
MALLOC( 89) 371
MALLOC( 32) 372
MALLOC( 89) 373
MALLOC( 17) 374
FREE( 32) 10
MALLOC( 18) 375
MALLOC( 32) 376
MALLOC( 13) 377
MALLOC( 18) 378
FREE( 32) 11
FREE( 128) 12
MALLOC( 64) 379
MALLOC( 184) 380
MALLOC( 64) 381
The pattern of malloc/free seems to be always the same (I ran HelloWorld, J2Demo and SwingSet2). We can possibly take advantage of that.
There are 2 threads involved, but those are used sequentially and always in the same order at the same call, so for all purposes it is virtually single threaded behavior.
Investigate...
Here is the pattern:
MALLOC( 32) 1
MALLOC( 32) 2
MALLOC( 32) 3
MALLOC( 32) 4
MALLOC( 32) 5
MALLOC( 32) 6
MALLOC( 56) 7
MALLOC( 24) 8
MALLOC( 56) 9
MALLOC( 24) 10
MALLOC( 56) 11
MALLOC( 24) 12
MALLOC( 56) 13
MALLOC( 24) 14
MALLOC( 80) 15
MALLOC( 80) 16
MALLOC( 56) 17
MALLOC( 8) 18
MALLOC( 40) 19
MALLOC( 40) 20
MALLOC( 56) 21
MALLOC( 560) 22
MALLOC( 56) 23
MALLOC( 560) 24
MALLOC( 800) 25
MALLOC( 800) 26
MALLOC( 800) 27
MALLOC( 8192) 28
MALLOC( 56) 29
MALLOC( 80) 30
MALLOC( 56) 31
MALLOC( 40) 32
MALLOC( 56) 33
MALLOC( 72) 34
MALLOC( 32) 35
MALLOC( 32) 36
MALLOC( 32) 37
MALLOC( 32) 38
MALLOC( 32) 39
MALLOC( 32) 40
MALLOC( 24) 41
MALLOC( 96) 42
MALLOC( 13) 43
MALLOC( 8) 44
MALLOC( 72) 45
MALLOC( 8) 46
MALLOC( 32) 47
MALLOC( 35) 48
MALLOC( 27) 49
MALLOC( 32) 50
MALLOC( 29) 51
MALLOC( 16) 52
MALLOC( 32) 53
MALLOC( 25) 54
MALLOC( 13) 55
MALLOC( 32) 56
MALLOC( 10) 57
MALLOC( 10) 58
MALLOC( 32) 59
MALLOC( 20) 60
MALLOC( 13) 61
MALLOC( 32) 62
MALLOC( 22) 63
MALLOC( 32) 64
MALLOC( 18) 65
MALLOC( 32) 66
MALLOC( 10) 67
MALLOC( 32) 68
MALLOC( 1) 69
MALLOC( 16) 70
MALLOC( 32) 71
MALLOC( 27) 72
MALLOC( 1175) 73
MALLOC( 94) 74
MALLOC( 90) 75
MALLOC( 102) 76
MALLOC( 102) 77
FREE( 112) 0
MALLOC( 147) 78
MALLOC( 144) 79
FREE( 160) 1
MALLOC( 240) 80
FREE( 1536) 2
MALLOC( 32) 81
MALLOC( 19) 82
MALLOC( 29) 83
MALLOC( 32) 84
MALLOC( 3) 85
MALLOC( 30) 86
MALLOC( 32) 87
MALLOC( 19) 88
MALLOC( 15) 89
MALLOC( 224) 90
MALLOC( 224) 91
MALLOC( 16) 92
MALLOC( 24) 93
MALLOC( 24) 94
MALLOC( 24) 95
MALLOC( 24) 96
MALLOC( 24) 97
MALLOC( 24) 98
MALLOC( 24) 99
MALLOC( 24) 100
MALLOC( 24) 101
MALLOC( 24) 102
MALLOC( 24) 103
MALLOC( 24) 104
MALLOC( 24) 105
MALLOC( 24) 106
MALLOC( 24) 107
MALLOC( 24) 108
MALLOC( 24) 109
MALLOC( 24) 110
MALLOC( 24) 111
MALLOC( 24) 112
MALLOC( 24) 113
MALLOC( 24) 114
MALLOC( 24) 115
MALLOC( 24) 116
MALLOC( 24) 117
MALLOC( 24) 118
MALLOC( 24) 119
MALLOC( 24) 120
MALLOC( 24) 121
MALLOC( 24) 122
MALLOC( 24) 123
MALLOC( 24) 124
MALLOC( 24) 125
MALLOC( 24) 126
MALLOC( 24) 127
MALLOC( 24) 128
MALLOC( 24) 129
MALLOC( 24) 130
MALLOC( 24) 131
MALLOC( 24) 132
MALLOC( 24) 133
MALLOC( 24) 134
MALLOC( 24) 135
MALLOC( 24) 136
MALLOC( 24) 137
MALLOC( 24) 138
MALLOC( 24) 139
MALLOC( 24) 140
MALLOC( 24) 141
MALLOC( 24) 142
MALLOC( 24) 143
MALLOC( 24) 144
MALLOC( 24) 145
MALLOC( 24) 146
MALLOC( 24) 147
MALLOC( 24) 148
MALLOC( 24) 149
MALLOC( 24) 150
MALLOC( 24) 151
MALLOC( 24) 152
MALLOC( 24) 153
MALLOC( 24) 154
MALLOC( 24) 155
MALLOC( 24) 156
MALLOC( 24) 157
MALLOC( 24) 158
MALLOC( 24) 159
MALLOC( 24) 160
MALLOC( 24) 161
MALLOC( 24) 162
MALLOC( 24) 163
MALLOC( 24) 164
MALLOC( 24) 165
MALLOC( 24) 166
MALLOC( 24) 167
MALLOC( 24) 168
MALLOC( 24) 169
MALLOC( 24) 170
MALLOC( 24) 171
MALLOC( 24) 172
MALLOC( 24) 173
MALLOC( 24) 174
MALLOC( 24) 175
MALLOC( 24) 176
MALLOC( 24) 177
MALLOC( 24) 178
MALLOC( 24) 179
MALLOC( 24) 180
MALLOC( 24) 181
MALLOC( 24) 182
MALLOC( 24) 183
MALLOC( 24) 184
MALLOC( 24) 185
MALLOC( 24) 186
MALLOC( 24) 187
MALLOC( 24) 188
MALLOC( 24) 189
MALLOC( 24) 190
MALLOC( 24) 191
MALLOC( 24) 192
MALLOC( 24) 193
MALLOC( 24) 194
MALLOC( 24) 195
MALLOC( 24) 196
MALLOC( 24) 197
MALLOC( 24) 198
MALLOC( 24) 199
MALLOC( 24) 200
MALLOC( 24) 201
MALLOC( 24) 202
MALLOC( 24) 203
MALLOC( 24) 204
MALLOC( 24) 205
MALLOC( 24) 206
MALLOC( 24) 207
MALLOC( 24) 208
MALLOC( 24) 209
MALLOC( 24) 210
MALLOC( 24) 211
MALLOC( 24) 212
MALLOC( 24) 213
MALLOC( 24) 214
MALLOC( 24) 215
MALLOC( 24) 216
MALLOC( 24) 217
MALLOC( 24) 218
MALLOC( 24) 219
MALLOC( 24) 220
MALLOC( 24) 221
MALLOC( 24) 222
MALLOC( 24) 223
MALLOC( 24) 224
MALLOC( 24) 225
MALLOC( 24) 226
MALLOC( 24) 227
MALLOC( 24) 228
MALLOC( 24) 229
MALLOC( 24) 230
MALLOC( 24) 231
MALLOC( 24) 232
MALLOC( 24) 233
MALLOC( 24) 234
MALLOC( 24) 235
MALLOC( 24) 236
MALLOC( 24) 237
MALLOC( 24) 238
MALLOC( 24) 239
MALLOC( 24) 240
MALLOC( 24) 241
MALLOC( 24) 242
MALLOC( 24) 243
MALLOC( 24) 244
MALLOC( 24) 245
MALLOC( 24) 246
MALLOC( 24) 247
MALLOC( 24) 248
MALLOC( 24) 249
MALLOC( 24) 250
MALLOC( 24) 251
MALLOC( 24) 252
MALLOC( 24) 253
MALLOC( 24) 254
MALLOC( 24) 255
MALLOC( 24) 256
MALLOC( 24) 257
MALLOC( 24) 258
MALLOC( 24) 259
MALLOC( 24) 260
MALLOC( 24) 261
MALLOC( 24) 262
MALLOC( 24) 263
MALLOC( 24) 264
MALLOC( 24) 265
MALLOC( 24) 266
MALLOC( 24) 267
MALLOC( 24) 268
MALLOC( 24) 269
MALLOC( 24) 270
MALLOC( 24) 271
MALLOC( 24) 272
MALLOC( 24) 273
MALLOC( 24) 274
MALLOC( 24) 275
MALLOC( 24) 276
MALLOC( 24) 277
MALLOC( 24) 278
MALLOC( 24) 279
MALLOC( 24) 280
MALLOC( 24) 281
MALLOC( 24) 282
MALLOC( 24) 283
MALLOC( 24) 284
MALLOC( 24) 285
MALLOC( 24) 286
MALLOC( 24) 287
MALLOC( 24) 288
MALLOC( 24) 289
MALLOC( 24) 290
MALLOC( 24) 291
MALLOC( 24) 292
MALLOC( 24) 293
MALLOC( 24) 294
MALLOC( 24) 295
MALLOC( 24) 296
MALLOC( 24) 297
MALLOC( 24) 298
MALLOC( 24) 299
MALLOC( 24) 300
MALLOC( 24) 301
MALLOC( 24) 302
MALLOC( 24) 303
MALLOC( 24) 304
MALLOC( 24) 305
MALLOC( 24) 306
MALLOC( 24) 307
MALLOC( 24) 308
MALLOC( 24) 309
MALLOC( 24) 310
MALLOC( 24) 311
MALLOC( 24) 312
MALLOC( 24) 313
MALLOC( 24) 314
MALLOC( 24) 315
MALLOC( 24) 316
MALLOC( 24) 317
MALLOC( 24) 318
MALLOC( 24) 319
MALLOC( 24) 320
MALLOC( 24) 321
MALLOC( 24) 322
MALLOC( 24) 323
MALLOC( 24) 324
MALLOC( 24) 325
MALLOC( 24) 326
MALLOC( 24) 327
MALLOC( 24) 328
MALLOC( 24) 329
MALLOC( 24) 330
MALLOC( 24) 331
MALLOC( 24) 332
MALLOC( 24) 333
MALLOC( 24) 334
MALLOC( 24) 335
MALLOC( 24) 336
MALLOC( 24) 337
MALLOC( 24) 338
MALLOC( 24) 339
MALLOC( 24) 340
MALLOC( 24) 341
MALLOC( 24) 342
MALLOC( 24) 343
MALLOC( 24) 344
MALLOC( 24) 345
MALLOC( 24) 346
MALLOC( 24) 347
MALLOC( 24) 348
MALLOC( 24) 349
MALLOC( 24) 350
MALLOC( 24) 351
MALLOC( 24) 352
MALLOC( 24) 353
MALLOC( 24) 354
MALLOC( 24) 355
MALLOC( 24) 356
MALLOC( 24) 357
MALLOC( 24) 358
MALLOC( 16) 359
FREE( 16) 3
MALLOC( 16) 360
MALLOC( 32) 361
FREE( 16) 4
MALLOC( 64) 362
FREE( 32) 5
MALLOC( 128) 363
FREE( 64) 6
MALLOC( 20) 364
FREE( 32) 7
MALLOC( 8) 365
MALLOC( 33) 366
MALLOC( 8) 367
MALLOC( 16) 368
MALLOC( 89) 369
FREE( 16) 8
FREE( 16) 9
MALLOC( 17) 370
MALLOC( 89) 371
MALLOC( 32) 372
MALLOC( 89) 373
MALLOC( 17) 374
FREE( 32) 10
MALLOC( 18) 375
MALLOC( 32) 376
MALLOC( 13) 377
MALLOC( 18) 378
FREE( 32) 11
FREE( 128) 12
MALLOC( 64) 379
MALLOC( 184) 380
MALLOC( 64) 381